剑指offer:平衡二叉树
1、题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
2、解题思路:
(1)平衡二叉树是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
(2)根据概念,我们需要判断左右子树的高度相差是否超过,并且还要判断左右子树是否是平衡二叉树。
3、JavaScript实现:
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ // 判断二叉树的深度 function TreeDepth(root){ if(root === null){ return 0; } var leftLen = TreeDepth(root.left); var rightLen = TreeDepth(root.right); return leftLen > rightLen ? leftLen + 1 : rightLen + 1; }; function IsBalanced_Solution(root) { // 空树也是平衡二叉树 if(root === null){ return true; } // 左右子树的高度差应该小于1,否则便不是平衡二叉树 var leftLen = TreeDepth(root.left); var rightLen = TreeDepth(root.right); var lenDif = leftLen - rightLen; if(lenDif > 1 || lenDif < -1){ return false; } // 左右子树,同样要满足是二叉树的要求,否则便不是平衡二叉树 return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); }