二叉樹的遞迴呼叫

2021-09-09 09:10:43 字數 1501 閱讀 4871

二叉樹本身就是遞迴定義的,所以在二叉樹上運用遞迴非常方便。下面是我刷的常見關於二叉樹的遞迴演算法的題目

leetcode 104. maximum depth of binary tree

題意:找根結點到葉子結點的最長距離(即最大深度)

演算法思路:當結點為null時,返回0,否則返回左右子樹最大距離+1。

附上**:

public int maxdepth(treenode root)
leetcode 111. minimum depth of binary tree

題意:找根結點到葉子結點的最短距離

演算法思路:當結點為null(將null看做是一棵空樹)時,返回0,然後求左節點到葉子結點的最短距離l,再求右結點到葉子結點的最短距離,求完之後不能直接返回min(l,r)+1,因為當 l == 0 && r != 0 時返回r+1,而不是0。最後返回min(r.l)+1;

附上**:

//leetcode 111. minimum depth of binary tree

public int mindepth(treenode root)

leetcode 226. invert binary tree

題意:將一顆二叉樹的左右子樹反轉

演算法思路:當樹為null時,返回null,然後分別遞迴呼叫左子樹和右子樹,實現了左右子樹反轉後,就可以反轉當前的數(左右子樹交換就可實現),最後返回當前的樹結點。

附上**:

//leetcode 226. invert binary tree

public treenode inverttree(treenode root)

leetcode 100. same tree

題意:判斷兩棵樹是否相同。

演算法思路:if 兩棵樹都為null時,返回true,else if 兩棵樹都不為空 && 其值相等 && 遞迴呼叫兩棵樹的左子樹和右子樹返回都為true,返回true,else 返回 false。

附上**:

//leetcode 100. same tree

public boolean issametree(treenode p, treenode q)

leetcode 101. symmetric tree

題意:判斷是否為對稱樹。

演算法思路:當root為空時,返回true,然後另寫乙個方法返回是否為對稱二叉樹,包含2個引數 l,r,分別為root的左右結點。不寫了,看**吧,**更清晰。

public boolean leftisright(treenode l,treenode r)
總結:遞迴函式一定要把握2點,函式出口條件和遞迴過程,理解遞迴函式呼叫就是不斷壓棧和彈棧的過程。

二叉樹的非遞迴呼叫

實現過程 首先我們知道中序遍歷就是先訪問左子樹,再根節點,最後右子樹。stl的stack容器滿足我們的先進後出的要求。1.訪問根節點的左孩子節點,看是否為null,如果存在左節點,該節點入棧如果沒有左子樹,那就訪問該節點。2.如果節點有右子樹,則重複1步驟,如果沒有右子樹 節點訪問完畢 回退,讓棧頂...

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...