建立一个二叉排序树,并计算其高度,是否为二叉平衡树
来源:互联网 发布:诗人 知乎 编辑:程序博客网 时间:2024/06/05 07:35
#include <iostream> #include <cstdio> using namespace std;struct Node{Node *lchild;Node *rchild;int d;}Tree[100];int loc;Node *create(){Tree[loc].lchild = Tree[loc].rchild = NULL;return &Tree[loc++];}Node *insert(Node *T, int x){if (T == NULL) {T = create();T->d = x;return T;}else if (T->d > x)T->lchild = insert(T->lchild, x);else if (T->d < x)T->rchild = insert(T->rchild, x);return T;}void get_he(Node *root, int &h){if (root == NULL)h = 0;else {int left_h;get_he(root->lchild, left_h);int right_h;get_he(root->rchild, right_h);if (left_h > right_h)h = 1 + left_h;elseh = 1 + right_h;}}int dep(Node *root) //从底向上加{if (root == NULL)return 0;int l = 0, r = 0;l = dep(root->lchild); //递归求左右深度r = dep(root->rchild);return l>r ? (l + 1) : (r + 1); //深度为前一个左右最大值加1}bool bebalance(Node *root){if (root == NULL)return true;int ld = dep(root->lchild);int lr = dep(root->rchild);int di = abs(ld - lr);if (di>1) //根节点平衡return false;return bebalance(root->lchild) && bebalance(root->rchild); //左右子树平衡}int main(){int n, x, i;loc = 0;Node *T = NULL;cin >> n;for (i = 0; i<n; i++) {cin >> x;T = insert(T, x);}int h = 0;get_he(T, h);cout << h << endl;cout << bebalance(T) << endl;system("pause");return 0;}
运行效果:
0 0
- 建立一个二叉排序树,并计算其高度,是否为二叉平衡树
- 平衡二叉树计算高度的同时判断是否平衡
- 判断二叉树是否平衡,计算树的高度
- 如何判断一个二叉树是否为平衡二叉树。
- 二叉排序树 平衡二叉树
- 判别二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 判断二叉树是否为二叉排序树
- 【剑指offer】判断二叉树是否平衡(左右子树高度差最多为1)
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 二叉排序树和平衡二叉树
- 二叉排序树、二叉平衡树算法
- 平衡二叉树之二叉排序树
- 二叉排序树和平衡二叉树
- 二叉排序树与平衡二叉树
- 在CentOS 7上安装Oracle 11.2.0.3
- python安装第三方模块UnicodeDecodeError:'ascii' codec can't decode byte ···
- DEVICE_ATTR的使用
- 初探 iOS8 中的 Size Class
- Log4j配置文件解析以及加载自己的配置文件
- 建立一个二叉排序树,并计算其高度,是否为二叉平衡树
- C#集合
- SQL Server 2005 Express 开启远程连接
- 新员年终总结范文开头工年终工作总结
- Java EE eclipse 配置tomcat服务器
- android 点9PNG制作
- Midnight Commander (mc) 使用备忘
- File类文件读写函数案例
- javascript小数乘法精确率问题