求二元查找树的镜像

来源:互联网 发布:淘宝评价怎么删除图片 编辑:程序博客网 时间:2024/06/03 05:07
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。

例如输入:

     8
    /  \
  6      10
 /\       /\
5  7    9   11

输出:

      8
    /  \
  10    6
 /\      /\
11  9  7  5

#include <iostream>#include <stack>using namespace std;struct node{node *lchild,*rchild;int value;};class list{public:list();void InOrder();void turnover();private:void turnover0(node* p);private:node* root;};void list::turnover0(node* p){if(NULL==p)return;node* temp=p->lchild;p->lchild=p->rchild;p->rchild=temp;turnover0(p->lchild);turnover0(p->rchild);}void list::turnover(){    turnover0(root);}void list::InOrder(){if(NULL==root)return;stack<node*> s;node* curr=root;while(1){while(curr){s.push(curr);curr=curr->lchild;}if(s.empty())break;curr=s.top();s.pop();cout<<curr->value<<'\t';curr=curr->rchild;}}list::list(){cout<<"请输入您想要输入的数字,按‘#’结束:"<<endl;int i;if(cin>>i==NULL){cout<<"您的输入有误"<<endl;exit(-1);}root=new node;root->value=i;root->lchild=NULL;root->rchild=NULL;node *p,*q;while(cin>>i){p=new node;p->value=i;p->lchild=NULL;p->rchild=NULL;q=root;while(1){if(p->value<q->value){if(q->lchild==NULL){q->lchild=p;break;}q=q->lchild;}else if(p->value>q->value){if(q->rchild==NULL){q->rchild=p;break;}q=q->rchild;}}}}void main(){    list test;test.InOrder();cout<<endl;test.turnover();test.InOrder();system("pause");}


原创粉丝点击