二叉树简单操作

来源:互联网 发布:mac为啥不能玩魔兽世界 编辑:程序博客网 时间:2024/05/16 23:14
int LevelBiTree(BiTree T){//返回树的高度,只有一个根节点高度定为1cout<<"the Level num of tree is: ";queue<BiTree> q;BiTree p=T,s=p;//s保存每一层最右边的结点int n=0;//层数 只有一个结点为一层q.push(p);while(!q.empty()){p=q.front();q.pop();//visit(p);if(p->lchild){q.push(p->lchild);}if(p->rchild){q.push(p->rchild);}if(p==s) {//出队的元素是上一层的最右边结点n++;if(!q.empty()) s=q.back();//将当前的队尾元素,即当前层的最右边元素,便于下次比较}}cout<<n<<endl;return n;}void SwapChild(BiTree &T){//二叉树所有结点的左右孩子调换cout<<"左右孩子调换后的树 is: ";queue<BiTree> q;BiTree p=T;q.push(p);while(!q.empty()){p=q.front();q.pop();//visit(p);swap(p->lchild,p->rchild);if(p->lchild){q.push(p->lchild);}if(p->rchild){q.push(p->rchild);}}cout<<endl;}void SwapChildRecursion(BiTree &T){//分治法,先交换其左孩子,再交换其有孩子 //两边都完成了,需要把这两个交换一下(合并过程)if(T){//实际是个递归结束条件SwapChildRecursion(T->lchild);SwapChildRecursion(T->rchild);swap(T->lchild,T->rchild);}}int Similar(BiTree T1,BiTree T2){//判断两棵树的相似性if(T1==NULL&&T2==NULL) return 1;else if(T1==NULL||T2==NULL) return 0;//递归结束条件else{int left=Similar(T1->lchild,T2->lchild);//判断其左子树的相似性int right=Similar(T1->rchild,T2->rchild);//判断其右子树的相似性return left&&right;//左右子树都相似才说明相似,这个是合并}}


 

原创粉丝点击