博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Balanced Binary Tree
阅读量:5244 次
发布时间:2019-06-14

本文共 1877 字,大约阅读时间需要 6 分钟。

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

 

转载于:https://www.cnblogs.com/anne-vista/p/4812005.html

你可能感兴趣的文章
指数(道琼斯指数)
查看>>
python Tricks —— list 镜像复制与 list comprehension 列表解析的顺序
查看>>
对话框的应用
查看>>
extjs中新建窗体时,给窗体添加背景图片不显示问题之一
查看>>
reporting报表 添加序号
查看>>
前端的性能提升的基本原则
查看>>
一天进步一点点
查看>>
idea 修改单个项目的 默认编码格式
查看>>
eclipse工作空间的基本配置
查看>>
CloseHandle()函数的使用
查看>>
<<人间失格>>阅读
查看>>
11-4 分时系统
查看>>
Python-PyQt4学习资料汇总
查看>>
iOS:苹果推送----推送证书的生成
查看>>
1.1 Java 的概述
查看>>
如何判断单链表是否有环,如果有怎么找到进入环的节点
查看>>
Java学习之杨辉三角
查看>>
设计软件AI学习体会及图片
查看>>
jQuery开发者眼中的AngularJS
查看>>
SpringMVC中使用Interceptor拦截器
查看>>