题目链接

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=0&tqId=0&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

判断一棵树是否为平衡二叉树

思路

法一,定义版:按定义,自上而下遍历树,会有重复计算。

法二,优化版:自下而上遍历树,若不平衡则返回-1,至多遍历树一遍。

相关知识

平衡二叉树:或空树,或根结点左右子树高度差<=1,且左右子树也为平衡二叉树。

代码

定义版

class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL){return true;}
else if(abs(getDepth(pRoot->left)-getDepth(pRoot->right))<=1){
return true;
}
return false;
}
private:
int getDepth(TreeNode* pRoot){
if(pRoot==NULL){return true;}
else return max(getDepth(pRoot->left),getDepth(pRoot->right))+1;
}
};

优化版

class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return getDepth(pRoot)!=-1;
}
private:
int getDepth(TreeNode* pRoot){
if(pRoot==NULL){return 0;}
else{
int left=getDepth(pRoot->left);
if(left==-1){return -1;} int right=getDepth(pRoot->right);
if(right==-1){return -1;} if(abs(right-left)>1){return -1;}
else{return max(left,right)+1;}
}
}
};

[剑指Offer]判断一棵树为平衡二叉树(递归)的更多相关文章

  1. 剑指offer 判断树是不是对称的

    html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...

  2. 剑指Offer - 九度1520 - 树的子结构

    剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...

  3. 《剑指offer》面试题55 - II. 平衡二叉树

    问题描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null, ...

  4. 剑指offer(17)树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...

  5. 【剑指Offer】17、树的子结构

      题目描述:   输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解题思路:   要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...

  6. 剑指Offer:面试题18——树的子结构(java实现)

    问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; ...

  7. 【剑指offer】q50:树节点最近的祖先

    #@ root: the root of searched tree #@ nodeToFind: the tree-node to be found #@ path: the path from r ...

  8. 剑指offer(17)层次遍历树

    题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. public class Solution { ArrayList<Integer> list = new ArrayLis ...

  9. 【剑指offer】Q18:树的子结构

    类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就 ...

随机推荐

  1. screen 命令安装使用

    初次接触Linux的朋友总会有个感觉:Windows平台想同时运行多个操作,执行多个程序或命令只需要打开程序即可:但在Linux中,命令行就一个,要想同时执行多个命令如何操作? 其实,只需要一个简简单 ...

  2. Boolean类型

    Boolean类型是与布尔值对应的引用类型.如果要创建Boolean对象,语法如下: var booleanObject = new Boolean(true); Boolean类型的实例重写了val ...

  3. 查看已打包app的entitlements文件内容

    执行以下命令: codesign -d --ent :- /path/to/the.app https://developer.apple.com/library/content/technotes/ ...

  4. 服务限流-令牌桶java实现

    此文非常不错,抄自: https://www.cnblogs.com/googlemeoften/p/6020718.html 其他实现 https://www.cnblogs.com/LBSer/p ...

  5. hadoop-2

    AsyncDispatcher,直接看代码 @Override protected void serviceStart() throws Exception { //start all the com ...

  6. 各种Queue分析

    Queue主要方法的区别:   抛出异常 返回特殊值 插入 add(e)插入成功则返回true,没有可用空间则IllegalStateException offer(e) 移除 remove(e)获取 ...

  7. MySQL null与not null和null与空值''的区别

    参考连接:https://segmentfault.com/a/1190000009540449 相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是n ...

  8. JAVAWEB 一一 userweb1(原生,非servlet版)

    创建数据库和表 首先,创建一个web项目 然后引入jar包 创建jsp页面 创建包 创建接口 实现类 详细内容 首先创建一个登陆页面 login.jsp <%@ page language=&q ...

  9. eclipse 连接数据库记录

    两篇很好的文章介绍给大家: Eclipse使用JDBC方式连接SQLServer2016 通过Driver与DriverManager连接数据库 --------------------------- ...

  10. Java学习05 (第一遍) - JSP与Servlet

    JSP 客户端发出Request请求,JSP容器将JSP转译为Servlet的源码,再编译加载到内存执行,结果Response到客户端. Request->JSP->Servlet(jav ...