您的位置:首页 > 其它

判断二叉树是否平衡、是否完全二叉树、是否二叉排序树

2012-05-05 11:02 435 查看
//判断二叉树是否平衡
int isBalanced(Node* t)
{
if(t==NULL) return 1;
int leftDepth = TreeDepth(t->left);
int rightDepth = TreeDepth(t->right);
if(abs(leftDepth-rightDepth) > 1)
return 0;
else
return isBalanced(t->left) && isBalanced(t->right);
}
//判断两棵二叉树是否相等
int CompTree(Node* tree1, Node* tree2)
{
if(tree1==NULL && tree2==NULL)
return 1;
else if(tree1==NULL || tree2==NULL)
return 0;
if(tree1->data != tree2->data)
return 0;
if(CompTree(tree1->left,tree2->left)==1 && CompTree(tree1->right,tree2->right)==1)
return 1;
//反转二叉树也可能相等
if(CompTree(tree1->left,tree2->right)==1 && CompTree(tree1->right,tree2->left)==1)
return 1;
return 0;
}
//拷贝二叉树
void CopyTree(Node* s,Node* & d)
{
if(s==NULL) d = NULL;
Node* temp = new Node;
temp->data = s->data;
if(d==NULL) d = temp;
if(s->left) CopyTree(s->left,d->left);
if(s->right) CopyTree(s->right,d->right);
}
//判断二叉树是否是完全二叉树:层次遍历二叉树,遍历的左右节点入队列。若出队列的结点为空,则以后出队列的结点都为空,则为完全二叉树,否则不是
int ComplateTree(Node* bt)
{
Node* p=bt;
queue<Node*> q;
int tag=0;
if(p==NULL) return 1;
q.push(p);
while(!q.empty())
{
p=q.front(); q.pop();
if(p->left && !tag) q.push(p->left);
else if(p->left)  return 0;
else tag=1;
if(p->right && !tag) q.push(p->right);
else if(p->right)  return 0;
else tag=1;
}
return 1;
}
//判断二叉树是否是二叉排序树(BST):根据中序遍历序列是否升序来判断
bool IsBinarySortTree ( BinTree bt )
{
InitStack(S);
p = bt;  pre = 0;   // pre保持为p的中序前驱
while ( p or ! StackEmpty(S) )
{
if ( p )
{
Push(S, p);
p = p->lchild;
}
else
{
p = Pop(S);
if ( pre and (p->data <= pre->data) )  return false;  // 不是二叉排序树
pre = p;   // 记下前驱结点
p = p->rchild;
}
}
return true;  // 二叉排序树
}
//判断二叉树是否是二叉排序树(BST):层次遍历二叉树,若出队列的结点小于左结点的值,或者是大于右结点的值,则不是BST,否则是BST
bool IsBST(Node* T)
{
Queue q;Node* p;
if(T==NULL) return true;
EnQueue(q,T);
while(!empty(Q))
{
p=Dequeue(Q);
if(p->left)
if(p->data < p->left->data)
return false;
else EnQueue(Q,p->left);
if(p->right)
if(p->data > p->right->data)
return false;
else EnQueue(Q,p->right);
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: