[剑指Offer]判断一棵树为平衡二叉树(递归)
题目链接
题意
判断一棵树是否为平衡二叉树
思路
法一,定义版:按定义,自上而下遍历树,会有重复计算。
法二,优化版:自下而上遍历树,若不平衡则返回-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]判断一棵树为平衡二叉树(递归)的更多相关文章
- 剑指offer 判断树是不是对称的
		
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...
 - 剑指Offer - 九度1520 - 树的子结构
		
剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...
 - 《剑指offer》面试题55 - II. 平衡二叉树
		
问题描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null, ...
 - 剑指offer(17)树的子结构
		
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...
 - 【剑指Offer】17、树的子结构
		
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...
 - 剑指Offer:面试题18——树的子结构(java实现)
		
问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; ...
 - 【剑指offer】q50:树节点最近的祖先
		
#@ root: the root of searched tree #@ nodeToFind: the tree-node to be found #@ path: the path from r ...
 - 剑指offer(17)层次遍历树
		
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. public class Solution { ArrayList<Integer> list = new ArrayLis ...
 - 【剑指offer】Q18:树的子结构
		
类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就 ...
 
随机推荐
- strcore.cpp(156) 内存泄漏
			
vs搞了一个小工具涉及到线程 每次执行完退出的时候都会报 strcore.cpp(156) 的内存泄漏 原因是在线程内使用了CString 类型的传递参数 如果没有正常释放会报上面的错误.
 - Servlet基本_画面遷移
			
画面遷移方法は.下記ようがある.・リクエストのディスパッチ・リダイレクト(画面から) 1.ディスパッチ1)概念サーブレットから他のリソース(サーブレット.JSP.Htmlなど)にリクエストを転送するこ ...
 - 为什么java实体类需要重写toString方法
			
如果没重写toString的情况: Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符“@”和此对象哈希码的无符号十六进制表示组成.换句话 ...
 - unity脚本执行顺序
			
Awake ->OnEable-> Start ->-> FixedUpdate-> Update -> LateUpdate ->OnGUI ->R ...
 - Number的Util
			
1. NumberUtils.isNumber() : 判断字符串是否是数字 NumberUtils.isNumber("5.96");//结果是true NumberUtils. ...
 - vscode项目配置 vue-loader-webpack
			
使用vsCode进行项目配置 一.准备工作 1.下载Visual Studio Code 下载地址 2.打开vscode,根据自己需求下载相应插件,可以提高工作效率. 点击下角选项(我作了红框标记), ...
 - [原创]HTML 用div模拟select下拉框
			
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML xmlns=" ...
 - curl命令解析
			
curl命令可以实现http post或者get的请求,是linux下的命令行工具 1.1.直接请求url,打印标准输出 1.2.使用-o参数,可以标准输出到指定的位置 [root@VM-3-10-1 ...
 - CDH6离线安装
			
CentOS7下完全离线安装CDH6集群 CDH Linux 大数据 shareSHARE 245 浏览量 分享到微博 分享到 Twitter 分享到 QQ 本文是在CentOS7.5下进行C ...
 - soft selective sweeps 下的群体进化
			
1.Hard and soft selective sweeps 长期以来,快速适应主要与选择作用于高度多基因的数量性状有关,例如在育种试验期间.这些性状可以通过对大量已经存在的多态性的群体频率的微小 ...