面試題55 二叉樹的深度

2021-10-02 23:33:09 字數 2510 閱讀 2316

二叉樹的深度

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

如果一棵樹只有乙個結點,那麼它的深度是1。樹的深度是max(根節點左孩子深度,根節點右孩子深度)+1。

package com.wsy;

class tree

public tree(int value)

public tree(int value, tree left, tree right)

public int getvalue()

public void setvalue(int value)

public tree getleft()

public void setleft(tree left)

public tree getright()

public void setright(tree right)

}public class main

public static tree init()

public static int getdepth(tree tree)

return math.max(getdepth(tree.getleft()), getdepth(tree.getright())) + 1;

}}

平衡二叉樹

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某棵二叉樹中任意結點的左、右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。

借助求二叉樹深度的方法,可以得到每個結點的左右子樹深度,判斷每個結點左右子樹深度相差不超過1,那麼就是一棵平衡二叉樹。

如果我們採用後序遍歷的方式遍歷二叉樹的每個結點,在遍歷到乙個結點時,它的左右子樹已經判斷過了,只需要檢視結果即可。如果有子樹不滿足平衡了,直接返回,後面的結點也不需要驗證了。

package com.wsy;

class tree

public tree(int value)

public tree(int value, tree left, tree right)

public int getvalue()

public void setvalue(int value)

public tree getleft()

public void setleft(tree left)

public tree getright()

public void setright(tree right)

}public class main

public static tree init()

public static int getdepth(tree tree)

return math.max(getdepth(tree.getleft()), getdepth(tree.getright())) + 1;

}public static boolean checkbalance(tree tree)

int left = getdepth(tree.getleft());

int right = getdepth(tree.getright());

int difference = math.abs(left - right);

if (difference > 1)

return checkbalance(tree.getleft()) && checkbalance(tree.getright());

}}

package com.wsy;

class tree

public tree(int value)

public tree(int value, tree left, tree right)

public int getvalue()

public void setvalue(int value)

public tree getleft()

public void setleft(tree left)

public tree getright()

public void setright(tree right)

}public class main

public static tree init()

public static int checkbalance(tree tree)

int left = checkbalance(tree.getleft());

if (left == -1)

int right = checkbalance(tree.getright());

if (right == -1)

int difference = math.abs(left - right);

if (difference > 1) else

}}

面試題55 二叉樹的深度

輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如下圖中的二叉樹的深度為4,因為它從根結點到葉結點最長的路徑包含4個結點 從根結點1開始,經過結點2和結點5,最終到達葉結點7 思路 如果一棵樹只有乙個結點,它的深度為1...

面試題55 二叉樹的深度

題目一 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。遞迴版本 class solution 非遞迴 層次遍歷 遞迴遍歷,僅僅一行 class solution 迭代版本 class solution return depth...

面試題55 I 二叉樹的深度

題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度 方法 遞迴左右子樹 遞迴遍歷,取左右子樹的最大深度,加當前根結點的 1 個深度,就是結果 class solution intdfs treenode root in...