面試題55:二叉樹的深度
一、題目描述
問題(1)二叉樹的深度
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的/結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。
問題(2)平衡二叉樹
輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。
二、問題分析
問題(1)分析
第一個問題對大家都小意思啦,樹的深度=max(左子樹深度,右子樹深度)+1,採用遞歸實現。
問題(2)分析
同樣需要計算樹的深度,樹的深度=max(左子樹深度,右子樹深度)+1。
在遍歷過程中,需要判斷左右子樹深度相差是否超過1,如果不平衡,則令樹的深度=-1。最終根據樹的深度是否等於-1來確定該樹是不是平衡樹。
三、問題解答
問題(1)
public int TreeDepth(Node root) {
if(root==null) {
return 0;
}
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return Math.max(left+1,right+1);
}
問題(2)
// 主程序
public boolean IsBalanced_Solution(Node root) {
return getDepth(root)!=-1;
}
public int getDepth(Node root) {
if(root==null) {
return 0;
}
int left=getDepth(root.left);
if(left==-1) {
return -1;
}
int right=getDepth(root.right);
if(right==-1) {
return -1;
}
return Math.abs(left - right) > 1 ? -1 : 1 + Math.max(left, right);
}