平衡二叉树判断

来源:互联网 发布:淘宝不可以微信付款吗 编辑:程序博客网 时间:2024/05/10 10:05

平衡二叉树的定义:(1)必须是二叉树(可以是空树);(2)它的左右子树也应该是平衡二叉树,且左右子树的深度之差的绝对值不能超过1.(即可以为0,1)

struct Node{int data;Node *left;Node *right;};
以上为节点的结构。题目:现需要设计一个函数来判断给定的二叉树是否为平衡二叉树。【给定二叉树的根节点为R】

(1)依据平衡二叉树的定义来判断,即需要求设计一个求取树深度的函数

int Deepth(Node *R){if(!R)    return 0;else{   int left_deep = Deepth(R->left);   int right_deep = Deepth(R->right);   return  1+((left_deep>=right_deep)?left_deep:right_deep);}}

bool IsBiTree(Node *R){if(!R)    return true;int left_deep = Deepth(R->left);int right_deep=Deepth(R->right);if(abs(left_deep - right_deep)>1)     return false;else    return IsBiTree(R->left)&&IsBiTree(R->Right); }

(2)直接递归判断方法。[写得风格有点糟糕,但愿思路没错]

bool IsBiTree(Node *R){if(!R)return true;if(R->left==NULL && R->right==NULL)return true;else if(R->left==NULL && R->right->right==NULL)return true;else if(R->right==NULL && R->left->left==NULL)//前三种情况均是平衡二叉树结束的情况return true;else if(R->left==NULL && R->right->right)return false;else if(R->right==NULL && R->left->left)return false;elsereturn IsBiTree(R->left)&&IsBiTree(R->right);}