数据结构面试题/判断一棵二叉树是否是平衡二叉树
2017-07-27 23:24
246 查看
AVL树概念:如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有N个结点,其高度可保持在O(lgn),平均搜索时间复杂度O(lg(n)).
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:
1.它的左右子树都是AVL树;
2.左子树和右子树高度之差(简称平衡因子)的绝对值不超过1.
先定义一个二叉树的结构体:
判断下面一棵二叉树是否是平衡二叉树:
根据左右子树的深度判断是否是AVL树(即平衡二叉树),递归实现
结果是:
这棵树不是AVL树。
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:
1.它的左右子树都是AVL树;
2.左子树和右子树高度之差(简称平衡因子)的绝对值不超过1.
先定义一个二叉树的结构体:
template<class K, class V> //键值队 struct AVLTreeNode { AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL) , _pParent(NULL) , _key(key) , _value(value) , _bf(0) {} AVLTreeNode<K, V>* _pLeft; AVLTreeNode<K, V>* _pRight; AVLTreeNode<K, V>* _pParent; //结点的双亲 K _key; V _value; int _bf; //平衡因子--检测树的平衡 };
判断下面一棵二叉树是否是平衡二叉树:
根据左右子树的深度判断是否是AVL树(即平衡二叉树),递归实现
bool IsBalanceTree() { return _IsBalanceTree(_pRoot); } //判断一棵树是否是平衡二叉树--每个结点的平衡因子 bool _IsBalanceTree(Node* pRoot) { //前序 -- 空树 if (NULL == pRoot) return true; //检测根的平衡 size_t leftHeight = _Height(pRoot->_pLeft); size_t rightHeight = _Height(pRoot->_pRight); if (rightHeight - leftHeight != pRoot->_bf || abs(pRoot->_bf) > 1) { cout << pRoot->_key << "-->_bf=" << pRoot->_bf << endl; return false; } return _IsBalanceTree(pRoot->_pLeft) && _IsBalanceTree(pRoot->_pRight); } size_t _Height(Node* pRoot) { if (NULL == pRoot) return 0; if (NULL == pRoot->_pLeft && NULL == pRoot->_pRight) return 1; size_t leftHeight = _Height(pRoot->_pLeft); size_t rightHeight = _Height(pRoot->_pRight); return (rightHeight - leftHeight); }
结果是:
这棵树不是AVL树。
相关文章推荐
- 判断一棵二叉树是否平衡二叉树
- 编程实现判断一棵二叉树是否是平衡二叉树
- [互联网面试笔试汇总C/C++-16] 判断一棵二叉树是否是平衡二叉树
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 判断一棵二叉树是否是平衡二叉树
- 29.输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 判断一棵二叉树是否是平衡二叉树并求一颗二叉树的镜像——题集十
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- 《牛客网剑指offer39题》输入一棵二叉树,判断该二叉树是否是平衡二叉树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 如何判断一棵二叉树是否是平衡二叉树(AVL)
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现
- java 判断一棵二叉树是否为平衡二叉树
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- java数据结构-二叉树-判断一颗二叉树是否为平衡二叉树
- 如何只遍历一次判断一棵二叉树是否为平衡二叉树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。