給定乙個二叉樹,返回其最大深度。
示例:2 3
4 5 6 7
返回最大深度為3
利用深度優先或者廣度優先遍歷二叉樹,找到樹的最大深度。
type treenode struct
1.深度優先搜尋和二叉樹的前序遍歷比較類似。
2.利用遞迴的方式不停下探樹的深度。
3.遞迴的終止條件是如果節點為空就返回0。然後判斷左右子樹最大值同時加1來表示當前節點的高度。
func maxdepth(root *treenode) int left := maxdepth(root.left) right := maxdepth(root.right) if left > right return right + 1}
時間複雜度:o(n)其中n為節點數量。因為每個節點都要訪問一次。
空間複雜度:o(logn)其中n是節點數量。在樹不是平衡的情況下,空間複雜度是o(n),比如樹比較瘸腿一路左子樹的情況下。但是如果樹比較平衡的情況下空間複雜度是o(logn)。
1.廣度優先搜尋利用迭代的方式將每一層的節點都放入到佇列當中。
2.佇列出隊清空進入下一層。
3.利用乙個變數來標記深度。每次進入下一次都給這個變數加1來記錄深度。
時間複雜度:o(n),n代表節點,每乙個節點都要遍歷一遍。
空間複雜度:o(n),最壞的情況下,佇列當中裝滿了一層的節點。
如有錯誤,歡迎指正和討論。
面試題28 二叉樹的深度
思路 二叉樹的深度等於左右子樹的最大深度加1,顯然利用遞迴。include stdafx.h include include using namespace std struct binarytreenode 求二叉樹的深度 int depth binarytreenode proot int nl...
面試題39 1 二叉樹的深度
遞迴思想 如果一顆樹只有乙個節點,它的深度為1.如果根節點只有左子樹沒有右子樹,那麼它的深度為左子樹的深度加1,同理,只有右子樹沒有左子樹,它的深度為右子樹深度加1,如果既有左子樹又有右子樹,它的深度為左右子樹深度較大的加1。遞迴很容易實現 int findtreedeep bintree bt 非...
面試題55 二叉樹的深度
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如下圖中的二叉樹的深度為4,因為它從根結點到葉結點最長的路徑包含4個結點 從根結點1開始,經過結點2和結點5,最終到達葉結點7 思路 如果一棵樹只有乙個結點,它的深度為1...