判断一颗二叉树是否为平衡树

来源:互联网 发布:java ftp客户端源代码 编辑:程序博客网 时间:2024/06/06 11:37

平衡树是每一颗节点的左右子树高度差不超过1的。

思路:只需要将右子树的高度减去左子树的高度的绝对值不超过2,就是一颗平衡树。

代码:

1.普通版本,时间复杂度为O(N^2)

bool _IsBalance(Node* root)   {if(root==NULL)return true;int LeftHeight=_Height(root->_left );int RightHeight=_Height(root->_right );return abs(RightHeight-LeftHeight)<2&&_IsBalance(root->_left )&&_IsBalance(root->_right );}int _Height(Node* root){if(root==NULL)return 0;int LeftH=_Height(root->_left );int RightH=_Height(root->_right );return LeftH>RightH?LeftH+1:RightH+1;}

这样我们就会发现,一直在重复计算树的高度。

2.优化的版本,时间复杂度为O(N)

bool _IsBalanceOp(Node* root,int& Height){int LeftHeight=0;int RightHeight=0;if(root==NULL){return true;Height=0;}if(_IsBalanceOp(root->_left, LeftHeight)==false)  //左子树return false;if(_IsBalanceOp(root->_right, RightHeight)==false)  //右子树return false;Height=RightHeight>LeftHeight?RightHeight+1:LeftHeight+1;return abs(RightHeight-LeftHeight)<2;}


0 0