//判断是否为平衡二叉树
//思路:设计一个返回类,包括了树的高度,是否平衡
//递归的去检查左子树,和右子树返回树高度,平衡否?
//最后再检查左右子树的高度差
//如果大于1,则不平衡,否则选择左右子树较大一个再+1(自己)返回
class TreeNode
{
public:
int val;
TreeNode*left;
TreeNode* right;
TreeNode(int x) {
this->val = val;
this->left = NULL;
this->right = NULL;
}
};
typedef class TreeNode *Tree;
class ReturnData
{
public:
int height;
bool isB;
ReturnData(int x, bool t) {
this->height = x;
this->isB = t;
}
};
ReturnData* Process(Tree head)
{
if (head == NULL)
return new ReturnData(0, true);
ReturnData* left = Process(head->left);
if (!left->isB)
return new ReturnData(0, false);
ReturnData* right = Process(head->right);
if (!right->isB)
return new ReturnData(0, false);
if (abs(left->height - right->height > 1))
return new ReturnData(0, false);
return new ReturnData(max(left->height, right->height) + 1, true);
}
判断一个二叉树是否平衡
最新推荐文章于 2020-09-30 15:00:47 发布