Leetcode Balanced Binary Tree
Posted 茜茜的技术空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode Balanced Binary Tree相关的知识,希望对你有一定的参考价值。
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.
解题思路:
递归地计算每个节点的左右子树深度,看其是否平衡。
计算左右子树深度可参考Maximum Depth of Binary Tree 的递归解法。
Java code:
/** * Definition for a binary tree node. * 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 diff = maxDepth(root.left) - maxDepth(root.right); if(diff > 1 || diff < -1 ) { return false; } return isBalanced(root.left) && isBalanced(root.right); } public int maxDepth(TreeNode root) { //use recursion if(root == null) { return 0; } int leftmax = maxDepth(root.left); int rightmax = maxDepth(root.right); return Math.max(leftmax, rightmax) + 1; } }
20160607 time complexity: O(nlgn)
public class Solution { public boolean isBalanced(TreeNode root) { //time complexity: O(nlgn) //base case if (root == null) { return true; } int leftHeight = getHeight(root.left); int rightHeight = getHeight(root.right); if (Math.abs(leftHeight - rightHeight) > 1) { return false; } return isBalanced(root.left) && isBalanced(root.right); } private int getHeight(TreeNode root) { //time complexity: O(n) if (root == null) { return 0; } return Math.max(getHeight(root.left), getHeight(root.right)) + 1; } }
Reference:
1. http://www.cnblogs.com/infinityu/archive/2013/05/11/3073411.html
以上是关于Leetcode Balanced Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]题解(python):110 Balanced Binary Tree
LeetCode(110): Balanced Binary Tree
LeetCode题目:Balanced Binary Tree
LeetCode 110. Balanced Binary Tree 递归求解
c_cpp Balanced Binary Treehttp://oj.leetcode.com/problems/balanced-binary-tree/