判断一颗二叉树是否为平衡二叉树
来源:互联网 发布:ubuntu命令行输入中文 编辑:程序博客网 时间:2024/06/05 10:33
平衡二叉树:左子树和右子树的高度相差<=1,且左右子树都是平衡二叉树。
方法一:调用求二叉树高度的函数求每个节点的左右孩子深度,然后直接判断。
方法二:在方法一中,求该结点的的左右子树深度时遍历一遍树,再次判断子树的平衡性时又遍历一遍树结构,造成遍历多次。因此现在的做法是:一边遍历树一边判断每个结点是否具有平衡性。
具体代码看下面:
//二叉树的高度int _Height(AVLTreeNode<K,V>* pRoot){ if (pRoot == NULL) return 0; if (pRoot->_Left == NULL && pRoot->_Right == NULL) return 1; int heightL = _Height(pRoot->_Left); int heightR = _Height(pRoot->_Right); return (heightL > heightR) ? heightL + 1 : heightR + 1;}//(方法一)判断二叉树是否为平衡二叉树bool _IsBalance(AVLTreeNode<K, V>* pRoot){ if (NULL == pRoot) return true; int heightL = _Height(pRoot->_Left); int heightR = _Height(pRoot->_Right); if (abs(heightR - heightL) > 1) return false; return _IsBalance(pRoot->_Left) && _IsBalance(pRoot->_Right);}//(方法二)判断二叉树是否为平衡二叉树(优化版)bool _IsBalance(AVLTreeNode<K, V>* pRoot,int *pDepth){ if (NULL == pRoot) { *pDepth = 0; return true; } int heightL, heightR; if (_IsBalance(pRoot->_Left, &heightL) && _IsBalance(pRoot->_Right,&heightR )) { if (abs(heightR - heightL) <= 1) { *pDepth = 1+(heightL > heightR ? heightL : heightR); return true; } } return false;}
阅读全文
0 0
- 判断一颗二叉树是否为平衡二叉树
- 判断一颗二叉树是否为平衡二叉树
- 判断一棵二叉树是否为平衡二叉树
- 判断一颗二叉树是否为平衡树
- 判断是否为一颗平衡二叉树
- java数据结构-二叉树-判断一颗二叉树是否为平衡二叉树
- 判断一颗二叉树是否平衡
- 判断一颗二叉树是否是平衡二叉树
- 【二叉树】判断二叉树是否为平衡二叉树
- 判断一颗二叉树是否为平衡二叉树(AVL)
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- My97DatePicker日期插件在谷歌浏览器无法正常显示
- 第八节:在定时中断函数里执行独立按键的扫描程序。
- apache 启动后访问网页提示You don't have permission to access / on this server.
- 关于The server does not support version 3.0 of the J2EE Web module specification.问题的解决方案
- Java并发编程:深入剖析ThreadLocal
- 判断一颗二叉树是否为平衡二叉树
- 简便的golang orm
- Linux 常用基本命令 cal date
- Is Derek lying?
- pip install django失败时的解决办法
- 3417
- 中国安防行业发展趋势四大看点
- Integer与int的区别
- android中的AIDL