高度与深度的区别:
- 首先从高度和深度的定义上,高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数的。如下图,根结点开始算深度,和以4为开始的叶子节点开始算高度。
- 根节点是没有父节点的节点。根结点的深度为1。
- 虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
- 虽然定义不同,有时候深度高度不同,但是它们的目标值有时候处理问题时是相同的,比如求下图1的左子树的高度,就可以用深度来求,具体情况还需要多研究题总结。
题目链接 110. 平衡二叉树
如果是单纯的求一个树的高度,用迭代法是ok的。但是这里要求多个节点的高度,再用迭代法就较为复杂了。所以本题使用递归法来解决,先判断左右子树是否是平衡二叉树,再判断整个树本身是否满足平衡二叉树,若满足则求得当前节点的高度,并回溯到上一次递归中。具体细节见代码注释。
递归解法:
class Solution{
public boolean isBalanced(TreeNode root){
return getHeight(root) == -1?false:true;
}
int getHeight(TreeNode root){
if(root == null) return 0;
int result = 0;
int leftheight = getHeight(root.left);//判断子树是否满足平衡二叉树
if(leftheight == -1) return -1; //如果子树不满足,则整个树也不满足
int rightheight = getHeight(root.right);
if(rightheight == -1) return -1;
if(Math.abs(leftheight-rightheight)>1) result = -1;
else result = Math.max(leftheight,rightheight) + 1;//加上根的高度1,通过这里计算高度的
return result;
}
}