劍指offer 38 二叉樹的深度

2021-10-19 07:25:05 字數 1429 閱讀 1833

38. 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

struct treenode

1 class solution else

13 }

14 return 0;

15 }

16

17 int treedepth(treenode* proot)

18

21 };

1 class solution else

13 }

14 }

leetcode執行時間為0ms,空間為39.1mb

時間複雜度:對個每個結點都進行了一次遍歷,所以複雜度複雜度為o(n)

空間複雜度:遞迴棧的深度為o(logn)

利用佇列實現層序遍歷, 用乙個變數記錄當前深度的結點個數,每出隊乙個結點,入隊兩個子節點後計數器加一,如果當前層的所有結點都已經出隊完畢(計數器的值等於當前深度的結點個數),層數加一,計數器重置,當前層結點個數更新

1 class solution 

11 int dep = 0, count = 0, nextcount = q.size(); // nextcount 儲存的是當前層數的結點個數

12 while(!q.empty())

26 }

27 return dep;

28 }

29 };

丟擲當前層左右結點,將下層結點入隊,佇列中的元素個數即為當前層的結點個數

1 class solution 

8 queue.offer(root);

9 int layer = 0;

10 int count = 0;

11 while(!queue.isempty())

19 if(top.right != null)

22 }

23 layer++;

24 }

25 return layer;

26 }

27 }

leetcode執行時間為1ms,空間為38.6mb

時間複雜度:同樣是把每個元素都入隊出隊了一次,所以時間複雜度為o(n)

空間複雜度:空間複雜度為樹每層結點個數的最大值,即為o(n)

劍指offer 38 二叉樹的深度

題目 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 求深度,第一次能想到的方法就是遞迴,但是除了遞迴還有層次遍歷,本文提供遞迴和層次遍歷兩種解法。遞迴思想就是 求左右子樹,然後深度各加一,再比較哪個大,然後返回哪個。層次...

劍指offer 38 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。時間限制 1秒 空間限制 32768k 熱度指數 122264 廣度遍歷,佇列儲存結點,變數lh儲存上一行的最後乙個結點的位置,變數num儲存已經入隊的結點數量 當訪問的結點為上一...

劍指offer 38 二叉樹的深度

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。這個就是採取遞迴的方法,單獨寫乙個函式,引數是乙個節點和該節點所在的深度,每次講節點改為左右子樹節點進行遞迴,直到節點為空,將此時的深度與目前的最大深度比較取最大值即可。...