剑指offer 55 -II平衡二叉树

leetcode地址:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/solution/mian-shi-ti-55-ii-ping-heng-er-cha-shu-cong-di-zhi/
题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
示例:
剑指offer 55 -II平衡二叉树_第1张图片
方式一:先序遍历(从顶至下)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
     
    public boolean isBalanced(TreeNode root) {
     
        if(root == null) return true;
        return Math.abs(depth(root.left) -depth(root.right))<=1 && isBalanced(root.left) && isBalanced(root.right);
    }
    public int depth(TreeNode root){
     
        if(root == null) return 0;
        return Math.max(depth(root.left),depth(root.right))+1;
    }
}

方式二:从低至上
终止条件:
1.当root为空,说明越过叶节点,因此,返回高度0
2.当左(右)子树深度为-1;代表树的左(右)子树不是平衡树,因此,剪枝,直接返回-1

class Solution {
     
    public boolean isBalanced(TreeNode root) {
     
        return recur(root) != -1;
    }

    private int recur(TreeNode root) {
     
        if (root == null) return 0;
        int left = recur(root.left);
        if(left == -1) return -1;
        int right = recur(root.right);
        if(right == -1) return -1;
        return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
    }
}

你可能感兴趣的:(数据结构与算法)