【算法题】判断二叉树平衡性
来源:互联网 发布:mac文档在哪里 编辑:程序博客网 时间:2024/06/09 23:43
由平衡二叉树的定义可知,每个节点的左右子树的高度差要小于等于1
- 可以用递归实现,在遍历二叉树各节点事,若节点的左右子树的深度之差不超过1,则是平衡二叉树。
int getDepth(Tree*root){ if (root == NULL) return 0; int leftDepth = getDepth(root->left); int rightDepth = getDepth(root->right); return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;}bool IsBalanced(Tree* root){ if (root == NULL) return true; int leftDepth = getDepth(root->left); int rightDepth = getDepth(root->right); int diff = leftDepth - rightDepth; if (abs(diff) > 1) return false; return IsBalanced(root->left) && IsBalanced(root->right);}
- 上述方法在求该结点的的左右子树深度时遍历一遍树,再次判断子树的平衡性时又遍历一遍树结构,造成遍历多次。因此方法二是一边遍历树一边判断每个结点是否具有平衡性
bool IsBalancedCore(Tree* root, int& depth){ if (root == NULL) { depth = 0; return true; } int leftdepth(0), rightdepth(0); bool leftbalanced = IsBalancedCore(root->left, leftdepth); bool rightbalanced = IsBalancedCore(root->right, rightdepth); bool rootbalenced = abs(leftbalanced - rightbalanced) < 2; depth = max(leftdepth, rightdepth)+1; return leftbalanced&&rightbalanced&&rootbalenced;}bool IsBalanced(Tree* root){ int i(0); return IsBalancedCore(root, i);}
阅读全文
0 0
- 【算法题】判断二叉树平衡性
- 算法题目---判断平衡二叉树
- 判断平衡二叉树
- 判断二叉树平衡
- 平衡二叉树判断
- 判断平衡二叉树
- 判断平衡二叉树
- 平衡二叉树判断
- 判断平衡二叉树
- 判断平衡二叉树
- 平衡二叉树判断
- 判断平衡二叉树
- 【算法】判断二叉树是否是平衡二叉树
- 【算法题】如何判断一个二叉树是平衡二叉树
- 算法-平衡二叉树
- 编程算法 - 判断二叉树是不是平衡树 代码(C)
- 判断一个二叉树是不是平衡的(算法)
- 判断一棵树是否为平衡二叉树的算法
- 关于右移运算符
- 解决Centos克隆后仅一台虚拟机能够访问
- Windows下安装Python EDP_free并安装pandas
- SegmentControl的实现与使用
- k-means聚类算法
- 【算法题】判断二叉树平衡性
- TCP的三次握手与四次挥手(详解+动图)
- 链表
- 关于PCM音频数据的相关转换算法
- hibernare多对多关系映射
- Java swing创建按钮和标签及处理
- 20170604_分割成回文串
- Java类和C结构体之间自动转换
- Spring配置事务的五种方式