二叉樹最大深度遞迴版與非遞迴版演算法實現

2022-08-11 18:36:19 字數 1032 閱讀 9633

1.遞迴的本質是通過棧來儲存狀態,然後再次呼叫自己進入新的狀態,函式返回的時候回到上次儲存的狀態。 

所以遞迴轉化為非遞迴,一般通用方法是通過棧儲存當前結果狀態。 

2.舉個例子:

二叉樹最大深度(遞迴版)

1

public

static

intdeep(tree tree)89

if(tree.getleft() == null && tree.getright() == null

) 14

15int ltree =deep(tree.getleft());//遍歷左子樹深度

17int rtree =deep(tree.getright());//遍歷有子樹深度

1819

return ltree > rtree ? ltree+1:rtree+1;//比較左右子樹深度,返回打的一邊

2021 }

二叉樹最大深度(非遞迴版)

1

public

static

intdeep2(tree tree)

5int max = 0;

6 stackstacks = new stack();//節點棧

7 stackheights = new stack();//儲存當前節點深度狀態

8 heights.push(1);

9stacks.push(tree);

10while (!stacks.isempty())

1819

if(curtree.getright() != null)23

if(max 29return

max;

30 }

3.總結. 

遞迴容易造成棧溢位,通過非遞迴版實現,更節省空間。

遞迴演算法簡單,一般很難理解,非遞迴版**量多,但易理解。面試時要你寫個遞迴版的實現,不妨可以試試非遞迴版實現。

二叉樹最小深度(遞迴版)

題目 給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最小深度 2.分析 我最初的思路是遞迴所有節點,節點不為null則加1,然後r...

遞迴與非遞迴求二叉樹深度

分別用遞迴與非遞迴演算法求二叉樹深度。方法一 遞迴方法大家都很熟悉,如何用非遞迴求解呢?我們知道二叉樹有層序遍歷,利用層序遍歷的過程,記錄當前層數,那麼遍歷結束後也就求得二叉樹的層數,即深度。方法二 層序遍歷需要使用乙個佇列來儲存樹的節點。初始化講根節點入隊。接著只要佇列不為空,則出隊,並將出隊元素...

求二叉樹的最大深度(遞迴 非遞迴)

力扣104也有該題,可以使用上面進行驗證。當節點為空時,返回0。不為空時,當前節點為根節點的子樹深度為 左子樹深度 右子樹深度 1。求二叉樹的最大深度 param root return public int maxdepth treenode root return math.max maxdep...