如何判断一棵树是否是平衡二叉树

来源:互联网 发布:linux配置编译环境 编辑:程序博客网 时间:2024/05/02 01:04

        判断的思路很简单,若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,并且左右子树的高度差小于等于1。注意,实现的时候,判断左右子树的平衡性时,可以顺便计算子树高度,不用再另外计算一次,下面是其递归实现:

#include <iostream>using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:    bool isBalanced(TreeNode *root) {        int height;return myBalance(root,height);    }bool myBalance(TreeNode *root, int &height){//注意,将height用引用传进来if(root==NULL){//若为空,高度就为0,平衡height=0;return true;}int leftHeight;int rightHeight;bool leftBalance=myBalance(root->left,leftHeight);//root的左子树平衡吗?bool rightBalance=myBalance(root->right,rightHeight);//root的右子树平衡吗?height=max(leftHeight,rightHeight)+1;//以root为根的这棵树的高度,是root的左子树、右子树中的较高者加上root本身这个结点(即加1)if(leftBalance && rightBalance && abs(leftHeight-rightHeight)<=1)//如果左子树平衡,右子树平衡,并且左右子树高度差小于等于1return true;return false;}};int main(){TreeNode *root=new TreeNode(1);TreeNode *left=new TreeNode(2);TreeNode *right=new TreeNode(3);root->left=left;root->right=right;Solution *s=new Solution();cout<<s->isBalanced(root)<<endl;system("pause");return 0;}




0 0
原创粉丝点击