Leetcode: Balanced Binary Tree

来源:互联网 发布:东航巴黎昆明 知乎. 编辑:程序博客网 时间:2024/05/02 01:11

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

Below solution uses two recursion, which is not recommended: find the max depth of left and right node separately, and compare to see their difference. Actually recursion is repeated here, which can be improved.

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

A preferable method is: when calculating for the max depth, exam whether the difference of depth of left subtree and right subtree is larger than 1 at the same time. Once it is, return -1 as a false answer.

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public boolean isBalanced(TreeNode root) {        return maxDepth(root) != -1;    }        private int maxDepth(TreeNode root) {        if (root == null) {            return 0;        }                int left = maxDepth(root.left);        int right = maxDepth(root.right);        if (left == -1 || right == -1 || Math.abs(left - right) > 1) {            return -1;        }                return Math.max(left, right) + 1;    }}


0 0
原创粉丝点击