判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
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; }
相关文章推荐
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- 判断二叉树是否平衡以及二叉树的路径和
- 二叉树问题---判断一棵树是否为完全二叉树
- 【LeetCode101-110】二叉树对称及存储,前序中序遍历生成二叉树,中序后序生成二叉树,数组转化为AVL平衡树,判断二叉树是否平衡
- 判断一颗二叉树是否平衡
- 判断二叉树是否平衡
- 判断二叉树是否平衡java
- 二叉树经典面试题4~判断一棵树是否是完全二叉树
- 判断二叉树是否平衡 java
- 数据结构——判断二叉树是否为完全二叉树
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- 判断给定的二叉树是否为二叉排序树
- 判断二叉树是否平衡
- 判断二叉树是否为二叉排序树
- 判断二叉树是否是完全二叉树
- 【二叉树】层次遍历二叉树以及判断一棵树是否是完全二叉树
- 【面试题】判断一棵二叉树是否是完全二叉树
- 编写判断给定二叉树是否为二叉排序树的函数