剑指offer 编程题(39):判断是否是平衡二叉树
来源:互联网 发布:ideamaker 切片软件 编辑:程序博客网 时间:2024/05/17 00:02
AVL的定义
平衡二叉查找树:简称平衡二叉树。由前苏联的数学家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉树,根据科学家的英文名也称为AVL树。它具有如下几个性质:
可以是空树。
假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过1
平衡之意,如天平,即两边的分量大约相同。如定义,假如一棵树的左右子树的高度之差超过1,如左子树的树高为2,右子树的树高为0,子树树高差的绝对值为2就打破了这个平衡。如依次插入1,2,3三个结点(如下图)后,根结点的右子树树高减去左子树树高为2,树就失去了平衡。
class Solution {public: int tree_deep(TreeNode* pRoot) { if(pRoot == NULL) { return 0; } int left = tree_deep(pRoot->left); int right = tree_deep(pRoot->right); return left > right?(left+1):(right+1); } bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL) { return true; } int leftr = tree_deep(pRoot->left); int rightr = tree_deep(pRoot->right); int diff =abs(leftr - rightr); if(diff > 1) { return false; } else { return true; } }};
阅读全文