博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样推断一棵树是否是平衡二叉树
阅读量:6813 次
发布时间:2019-06-26

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

        推断的思路非常easy。若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,而且左右子树的高度差小于等于1。注意。实现的时候,推断左右子树的平衡性时。能够顺便计算子树高度,不用再另外计算一次。以下是其递归实现:

#include 
using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: bool isBalanced(TreeNode *root) { int height; return myBalance(root,height); } bool myBalance(TreeNode *root, int &height){//注意,将height用引用传进来 if(root==NULL){//若为空,高度就为0,平衡 height=0; return true; } int leftHeight; int rightHeight; bool leftBalance=myBalance(root->left,leftHeight);//root的左子树平衡吗? bool rightBalance=myBalance(root->right,rightHeight);//root的右子树平衡吗? height=max(leftHeight,rightHeight)+1;//以root为根的这棵树的高度。是root的左子树、右子树中的较高者加上root本身这个结点(即加1) if(leftBalance && rightBalance && abs(leftHeight-rightHeight)<=1)//假设左子树平衡,右子树平衡,而且左右子树高度差小于等于1 return true; return false; }};int main(){ TreeNode *root=new TreeNode(1); TreeNode *left=new TreeNode(2); TreeNode *right=new TreeNode(3); root->left=left; root->right=right; Solution *s=new Solution(); cout<
isBalanced(root)<

转载于:https://www.cnblogs.com/yutingliuyl/p/6891026.html

你可能感兴趣的文章
关系型数据库
查看>>
HDU 2685 I won't tell you this is about number theory
查看>>
华为三层交换机-路由-硬件防火墙的配置
查看>>
模型分离(选做)
查看>>
利用jira-python及selenium完成jira的统计报表及日报的填写
查看>>
事件绑定完整版2016/4/21
查看>>
Devextreme 与 Angular6 兼容问题解决
查看>>
JS基础
查看>>
【转载】利用向量积(叉积)计算三角形的面积和多边形的面积
查看>>
CentOS 7安装Mysql并设置开机自启动
查看>>
1491: [NOI2007]社交网络
查看>>
编译安装nginx,并使用systemd管理nginx
查看>>
红和绿
查看>>
IE 兼容性写法
查看>>
MSDN URL 重写
查看>>
使用go语言开发一个后端gin框架的web项目
查看>>
readonly 关键字与 const 关键字不同
查看>>
chrome失去响应问题
查看>>
PHP中使用了mcrypt_decrypt函数处理Json Json_decode 返回空值或者 NULL 的问题 json_last_error 3...
查看>>
Hive基本原理及环境搭建
查看>>