方法一:遞迴
void
treedepthhelper
(treenode *proot,
int curr,
int&max)
return;}
treedepthhelper
(proot-
>left, curr+
1, max)
;treedepthhelper
(proot-
>right, curr+
1, max);}
inttreedepth
(treenode* proot)
int depth =0;
int max =0;
treedepthhelper
(proot, depth, max)
;return max;
}
方法一:分治法
分治法簡介:求乙個規模為n的問題,先求左邊規模大約為n/2的問題,再求右邊規模大約為n/2的問題,然後合併左邊,右邊的解,從而求得最終解。具體可參考歸併排序。
步驟:求 pro(left, rigth) -> int
先求pro(left, (left+right)/2) -> lval
再求pro((left+right)/2 + 1, right) -> rval
merge(lval, rval) -> result
這裡以本題為具體例子:
函式是求二叉樹的最大深度,我們不必管函式具體是怎麼實現的。
所以最終結果為 max( 頭結點左子樹的最大深度, 頭結點右子樹的最大深度)+1
求treedepth(treenode* proot)->int
先求 treedepth(proot->left) ->lval
再求treedepth(proot->right) ->rval
return max(lval, rval) + 1
int
treedepth
(treenode* proot)
時間複雜度:o(n)
空間複雜度:o(n),當退化到鍊錶時
方法二:層次遍歷
求最大深度,可用佇列。因為要滿足先進先出的特性。
初始化:乙個佇列queueq, 將root節點入佇列q
如果佇列不空,做如下操作:
(1) 彈出佇列頭,儲存為node,將node的左右非空孩子加入佇列
(2) 做2,3步驟,直到隊列為空
int
treedepth
(treenode* proot)
++depth;
}return depth;
}
LeetCode每日一練 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 輸出 3深度優先 coding utf 8 構造乙個二叉樹類 class treenode def init self,x,y no...
每日一練(15) 二叉樹的映象
title 每日一練 15 二叉樹的映象 categories 劍指offer tags 每日一練 date 2022 01 28 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。例如輸入 4 2 7 1 3 6 9映象輸出 4 7 2 9 6 3 1示例 1 輸入 root 4,2,7,1,3...
二叉樹之 二叉樹深度
二叉樹深度 獲取最大深度 public static int getmaxdepth treenode root 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...