博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
93 平衡二叉树
阅读量:5262 次
发布时间:2019-06-14

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

原题网址:

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 

样例

给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}

A)  3            B)    3    / \                  \  9  20                 20    /  \                / \   15   7              15  7

二叉树A是高度平衡的二叉树,但是B不是

   
 
 
想不出来解决方案,网上搜了下参考大神的码了出来,思路如下:
 
1、先写一个特殊的求二叉树深度的函数,在其中用递归的方法返回二叉树深度,所谓特殊,就是若左右子树深度相差超过1的时候直接返回-1.定义好这个函数后,判断平衡函数只需要在函数主体中写返回二叉树深度不等于-1的bool值即可。
参考:
 
 
2、采用递归的方式,判断某个结点的平衡因子(左右子树高度差)是否大于1,若平衡因子大于1,则其一定不是平衡二叉树,否则,继续判断。
参考:
 
1和2是一种方法。
 
/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {public:    /**     * @param root: The root of binary tree.     * @return: True if this Binary tree is Balanced, or false.     */    bool isBalanced(TreeNode * root) {        // write your code here        return treeDepth(root)!=-1;    }        int treeDepth(TreeNode * root) //计算以实参为根节点的树的深度,非平衡时直接返回-1;{    if (root==NULL)    {        return 0;    }    int leftDepth=treeDepth(root->left);    int rightDepth=treeDepth(root->right);    if (leftDepth==-1||rightDepth==-1||abs(leftDepth-rightDepth)>1)    {        return -1;    }    return max(leftDepth,rightDepth)+1;}};

 

 其他参考:

 
 
 

转载于:https://www.cnblogs.com/Tang-tangt/p/8894010.html

你可能感兴趣的文章
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>
C 筛选法找素数
查看>>