1. 程式人生 > >二叉樹相關

二叉樹相關

賦值 進行 n) 後序 復雜 很好 時間 葉子 style

BST:

增:(插入)

    ? 若當前的二叉查找樹為空,則插入的元素為根節點,

    ? 若插入的元素值小於根節點值,則將元素插入到左子樹中,

    ? 若插入的元素值不小於根節點值,則將元素插入到右子樹中,

  ? 遞歸上述過程,直到找到插入點為葉子節點

查:

給定一顆二叉查找樹,查找某節點p的過程如下:

? 將當前節點cur賦值為根節點root;

? 若p的值小於當前節點cur的值,查找cur的左子樹;

? 若p的值不小於當前節點cur的值,查找cur的右子樹;

? 遞歸上述過程,直到cur的值等於p的值或者cur為空;

? 當然,若節點是結構體,註意定義“小於”“不小於”“等於”的具體函數。

刪:

記待刪除的節點為p,分三種情況進行處理:

? p為葉子節點

  p為葉子節點,直接刪除該節點,再修改p的父節點的指針

? p為單支節點

  若p為單支節點(即只有左子樹或右子樹),則將p的子樹與p的父親節點相連,刪除p即可

? p的左子樹和右子樹均不空

  若p的左子樹和右子樹均不空,則找到p的直接後繼d(p的右孩子的最左子孫),因為d一定沒有左子樹,所以使用刪除單支節點的方法:

刪除d,並讓d的父親節點dp成為d的右子樹的父親節點;同時,用d的值代替p的值;

  對偶的,可以找到p的直接前驅x(p的左孩子的最右子孫),x一定沒有右子樹,所以可以刪除x,並讓x的父親節點成為x的左子樹的父親節點。

二叉樹樹的遍歷 遞歸or非遞歸

前序遍歷 : http://www.cnblogs.com/zle1992/p/8387902.html

中序遍歷 :http://www.cnblogs.com/zle1992/p/8342423.html

後序遍歷 :http://www.cnblogs.com/zle1992/p/8458643.html

根據前序中序,構造二叉樹 http://www.cnblogs.com/zle1992/p/8360249.html

根據中序後序,構造二叉樹 http://www.cnblogs.com/zle1992/p/8379513.html

平衡二叉樹 Balanced Binary Tree(AVL樹)

這個方案很好的解決了二叉查找樹退化成鏈表的問題,把插入,查找,刪除的時間復雜度最好情況和最壞情況都維持在O(logN)。

二叉樹相關