劍指offer38 輸入一棵二叉樹,求該樹的深度

2022-05-24 19:03:09 字數 1384 閱讀 1913

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

深度優先搜尋,每次得到左右子樹當前最大路徑,選擇其中較大者並回溯。int len = left>right?left+1:right+1;    // 當前最大路徑

1/*2

struct treenode 9};

*/10

class

solution

21 };

view code

1/*2

34輸入:5

第一行輸入有n,n表示結點數,結點號從1到n。根結點為1。 n <= 10。67

接下來有n行,每行有兩個個整型a和b,表示第i個節點的左右孩子孩子。a為左孩子,b為右孩子。當a為-1時,沒有左孩子。當b為-1時,沒有右孩子。89

輸出:10

輸出乙個整型,表示樹的深度。

1112

樣例輸入:133

142 3

15-1 -1

16-1 -1

17樣例輸出:182

19*/

20/*

2122

思路: 用遞迴,根節點的深度等於max(左孩子的深度,右孩子的深度)。

23*/

2425

//此題用陣列儲存樹節點

2627 #include28 #include29

struct

treenode;

33//

遞迴實現

34int depthinbtree(treenode* proot, int

index)

38int leftdepth =depthinbtree(proot, proot[index].pleftchild);

39int rightdepth =depthinbtree(proot, proot[index].prightchild);

40return (leftdepth>rightdepth ? leftdepth : rightdepth) + 1;41

}42int main(void)50

for (int i = 0; i)

57else

60if (rightindex != -1)63

else66}

6768

int depth = depthinbtree(proot, 0

);69 printf("

%d\n

", depth);

7071}72

73 system("

pause");

74return0;

75 }

view code

劍指Offer38 平衡二叉樹

思路 判斷是否是平衡二叉樹,即判斷任何乙個節點的左子樹和右子樹的高度差的絕對值小於等於1。最直接的做法,遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷。class treenode def init self,x self.val x...

劍指offer38 平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路 平衡二叉樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。判斷兩邊高度,我這裡想著用誰子樹沒了就會在和左子樹的比較中比較會等於 1,然後...

劍指offer 38 二叉樹的深度

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