LeetCode刷题笔录Balanced Binary Tree

来源:互联网 发布:网络教育介绍 编辑:程序博客网 时间:2024/05/29 19:00

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.

先写了个naive的递归算法。一个helper function递归计算节点的高度。在主函数里递归地计算每个节点左子树和右子树的高度差。

public class Solution {    public boolean isBalanced(TreeNode root) {        if(root == null)            return true;        if(Math.abs(treeHeight(root.left) - treeHeight(root.right)) > 1)            return false;        return isBalanced(root.left) && isBalanced(root.right);    }        public int treeHeight(TreeNode node){        if(node == null)            return 0;        return 1 + Math.max(treeHeight(node.left), treeHeight(node.right));    }}

这个居然没超时。

网上找到一个更好一点的,减少了递归的次数吧。

/** * 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 height(root) != -1;    }    private int height(TreeNode root)    {        if(root == null)            return 0;        int leftHeight = height(root.left);        if(leftHeight == -1)            return -1;        int rightHeight = height(root.right);        if(rightHeight == -1)            return -1;        if(Math.abs(leftHeight - rightHeight) > 1)            return -1;        return 1 + Math.max(leftHeight, rightHeight);    }}


0 0
原创粉丝点击