平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7
返回 true
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \
4 4
返回 false
算法流程: recur(root): 递归返回值: 当节点root 左 / 右子树的高度差 < 2 :则返回以节点root为根节点的子树的最大高度,即节点 root 的左右子树中最大高度加 11 ( max(left, right) + 1 ); 当节点root 左 / 右子树的高度差 ≥2 :则返回 −1 ,代表 此子树不是平衡树 。 递归终止条件: 当越过叶子节点时,返回高度 0 ; 当左(右)子树高度 left== -1 时,代表此子树的 左(右)子树 不是平衡树,因此直接返回 -1 ; isBalanced(root) : 返回值: 若 recur(root) != 1 ,则说明此树平衡,返回 true ; 否则返回 false
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public boolean isBalanced(TreeNode root) { 12 return recur(root) != -1; 13 } 14 15 int recur(TreeNode root){ 16 if(root==null){ 17 return 0; 18 } 19 int le = recur(root.left); 20 if(le == -1){ 21 return -1; 22 } 23 int ri = recur(root.right); 24 if(ri == -1){ 25 return -1; 26 } 27 return Math.abs(le-ri) < 2 ? Math.max(le,ri)+1 : -1; 28 } 29 }

浙公网安备 33010602011771号