程序5----判断平衡二叉树
来源:互联网 发布:淘宝链接转换器在线 编辑:程序博客网 时间:2024/06/10 14:35
概念
所谓平衡二叉树就是, 二叉树的任意结点的左右子树的高度差不超过1. 如下图就是一棵平衡二叉树.
基本思路实现
根据定义,可以很容易的想到, 可以求出每个结点的左右子树的高度, 然后比较高度差. 最先需要解决的就是求解二叉树的高度.
int treeDepth(tree *T) { if (T == null) return 0; int left = treeDepth(T->lchild); int right = treeDepth(T->rchild); return 1 + ((left > right) ? left : right); } boolean isBanlancedTree(tree *T) { if (T == null) { return true; } int left = treeDepth(T->lchild); int right = treeDepth(T->rchild); int diff = left - right; if (abs(diff) > 1) { return false; } else { return isBanlancedTree(T->lchild) && isBanlancedTree(T->rchild); } }
优化
上面那种思路有一个缺陷: 由于每次都要计算子树的高度, 造成底层的结点被遍历多次. 可以采用从下往上的方式来求高度, 判断是否时平衡二叉树.
boolean isBanlancedTree(tree *T, int *depth) { if (T == null) { *depth = 0; return true; } int left = 0; int right = 0; if (isBanlancedTree(T->lchild, &left) && isBanlancedTree(T->rchild, &right)) { int diff = left - right; if (abs(diff) < 1) { *depth = 1 + ((left > right) > left : right); return true; } } return false; }
0 0
- 程序5----判断平衡二叉树
- 二叉树5:平衡二叉树判断
- 判断平衡二叉树
- 判断二叉树平衡
- 平衡二叉树判断
- 判断平衡二叉树
- 判断平衡二叉树
- 平衡二叉树判断
- 判断平衡二叉树
- 判断平衡二叉树
- 平衡二叉树判断
- 判断平衡二叉树
- 判断平衡二叉树是否平衡
- 判断二叉树是否平衡
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断二叉树是否平衡
- 判断二叉树是不是平衡[
- 多个so库合并到一起,出现问题,解决办法
- 图像滤镜艺术---保留细节的磨皮之C#程序实现
- cuda的Pinned Memory(分页锁定内存)
- [转载]Linux的硬中断与软中断区别
- 浅谈Ajax
- 程序5----判断平衡二叉树
- 用Python开始机器学习(2:决策树分类算法)
- 复星国际董事长郭广昌现身了
- test
- k-d tree算法
- JS中Json对象和字符串之间的转换
- 吐槽贴:Websocket不是拯救世界的未来战士,那socket.io呢?
- splinter 学习笔记
- 前端开发工程化探讨--基础篇(长文)