剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
思路
递归结束条件为遍历至空结点,当前结点的最大深度为左右孩子较大的深度+1
代码:
public int maxDepth(TreeNode root) {
if (root == null)
return 0;
if (root.left == null && root.right==null)
return 1;
return getDepth(root);
}
public int getDepth(TreeNode root){
if (root == null)
return 0;
return Math.max(getDepth(root.left),getDepth(root.right))+1;
}
剑指 Offer 55 - II. 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
思路
和上道题联系起来,用上题方法求得左右子树的深度。平衡二叉树的条件是:对每个节点来说,其左右子树深度相差不超过1。(注意递归语句)
代码:
public boolean isBalanced(TreeNode root) {
if (root == null || root.left==null && root.right ==null)
return true;
if (Math.abs(getDepth(root.left)-getDepth(root.right))<=1)
return isBalanced(root.left)&&isBalanced(root.right);//注意这里的递归语句
return false;
}
public int getDepth(TreeNode root){
if (root == null)
return 0;
return Math.max(getDepth(root.left),getDepth(root.right))+1;
}