資料結構 二叉樹

2021-07-11 04:35:50 字數 2526 閱讀 6776

class node

}

前序遍歷--遞迴方式

public void preorderrecur(node head)

非遞迴方式:申請乙個棧,先把頭結點壓入棧中,然後彈出,再把該節點的右子樹壓入棧中,再把左子樹壓入棧中,依次迴圈上述操作。

public static void preorderrecur(node head)

}

中序遍歷--遞迴方式

public void inorderrecur(node head)
非遞迴方式:

1、申請乙個棧,記為stack,申請乙個變數為curr,初始時令cur等於頭結點

2、先把cur壓入棧中,對以cur節點為頭結點的整棵子樹來說,依次把整棵樹的左邊界壓入棧中,即不斷令cur=cur.left,然後重複步驟2

3、不斷重複步驟2,直到發現cur為空,此時從stack中彈出乙個節點,記為node,列印node的值,並讓cur=node.right,將其壓入棧中,繼續重複步驟2

4、當stack為空並且cur為空時,整個過程結束。

public static void inorderrecur(node head)

if(!stack.isempty())

}}

}

後序遍歷--遞迴方式

public void afterorderrecur1(node head)

非遞迴形式:

申請兩個棧

1、申請乙個棧記為s1,將數的頭結點壓入到s1中

2、從s1中彈出乙個節點記為cur,然後將其右子節點壓入到s1中,再將其左子樹節點壓入到s1中

3、在整個過程中,從s1中彈出的節點均放入到s2中

4、不斷重複步驟2和步驟三

5、從s2中依次彈出並列印。

public static void afterorderrecur(node head)

while(!s2.isempty())

}

不管是遞迴方式還是非遞迴方法,遍歷整棵樹的時間複雜度都是o(n),n為二叉樹的節點樹,額外空間複雜度為o(l),l為二叉樹的層數

判斷平衡二叉樹:通過後序遍歷來實現,首先判斷左子樹是不是平衡二叉樹,再判斷右子樹是不是平衡二叉樹

public static  boolean isbalance(node head)

private static int getheight(node head, int level,boolean res)

int lh = getheight(head.left,level + 1,res);

if(!res[0])

int rh=getheight(head.right, level+1, res);

if(!res[0])

if(math.abs(lh-rh)>1)

return math.max(lh,rh);

}

搜尋二叉樹   :每棵樹的頭結點都比各自左子樹上的所有節點值要大,也都比各自右子樹上的所有節點值要小。按中序遍歷得到的順序是從小到大的。

判斷是否是搜尋二叉樹:

滿二叉樹:除了最後一層的節點無任何子節點外,剩下每一層上的節點都有兩個子節點。  滿二叉樹的層數為l,節點數為n,則n=2^l-1

完全二叉樹:除最後一層外,其他每一層的節點數都是滿的。最後一層如果不滿,缺少的節點也全部的集中在右邊,那也是一顆完全二叉樹。

判斷完全二叉樹:

1、採用按層遍歷二叉樹的方式,從每層的左邊向右邊依次遍歷所有的節點

2、如果當前節點有右孩子,但沒有左孩子,直接返回false

3、如果當前節點並不是左右孩子全有,那之後的節點必須都為葉子節點,否則返回false

4、遍歷過程中不反回false,遍歷結束後返回true即可

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...