二叉樹相關
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)。
二叉樹相關