平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 }

 

posted @ 2020-08-20 15:19  王余阳  阅读(118)  评论(0)    收藏  举报