每日一練之二叉樹的深度

2021-10-08 14:21:34 字數 1382 閱讀 3448

方法一:遞迴

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 二叉樹寬度 使用佇列,層次遍歷二叉樹。在上一層遍歷完成後,下一層的所有節點已經放到佇列中,此時佇列中的元素個數就是下一層的寬度。以此類推,依次遍歷下一層即可求出二叉樹的最大寬度 獲取最大...