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