如何判断一棵树是否是平衡二叉树
来源:互联网 发布:linux配置编译环境 编辑:程序博客网 时间:2024/05/02 01:04
判断的思路很简单,若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,并且左右子树的高度差小于等于1。注意,实现的时候,判断左右子树的平衡性时,可以顺便计算子树高度,不用再另外计算一次,下面是其递归实现:
#include <iostream>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)//如果左子树平衡,右子树平衡,并且左右子树高度差小于等于1return 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<<s->isBalanced(root)<<endl;system("pause");return 0;}
0 0
- 如何判断一棵树是否是平衡二叉树
- 判断一棵树是否是平衡二叉树
- 判断一棵树是否是平衡二叉树
- 判断一棵树是否是平衡二叉树
- 如何判断一个二叉树是否是平衡的?
- 判断二叉树是否是平衡树
- 判断二叉树是否是平衡树
- 判断二叉树是否是平衡树
- 判断一颗树是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断二叉数是否是平衡树
- 判断是否是平衡二叉树
- Leetcode110 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 测试:判断一棵树是否是平衡二叉树
- C语言的本质(10)——指针本质
- HDOJ1048 The Hardest Problem Ever
- 判断给定的IP地址是否是内网IP
- hdu1002,大数加法,朴素版
- iOS拨打电话
- 如何判断一棵树是否是平衡二叉树
- braodcastReceiver 广播接收者 短信窃听者
- CString、TCHAR*、char*转换
- HDU 4342 History repeat itself
- C语言的本质(11)——指针与数组
- 每日上海: 一张图了解上海历史沿革爱一座城市
- nginx反向代理,页面缓存,虚拟主机等快速配置
- 【JSP】JSP与oracle数据库交互案例
- [LeetCode]—Candy 分糖果问题