标签:
思路:
采用递归的思想。对于根节点,若其左子树或右子树不为空(为空返回),则互换左、右子树,然后对于左、右子树,分别递归上述处理方法,直至叶节点。
实现代码如下:
#include<iostream> using namespace std; struct treenode { char data; treenode *lchild; treenode *rchild; }; //先序创建二叉树 treenode *init() { char data; cout<<"please inpur a number:(#代表NULL)"<<endl; cin>>data; if(data==‘#‘) return NULL; treenode *head=new treenode; head->data=data; head->lchild=init(); head->rchild=init(); return head; } //先序递归遍历二叉树 void print(treenode *head) { if(head) { cout<<head->data<<" "; print(head->lchild); print(head->rchild); } } //转换二叉树(镜像) void change(treenode *head) { if(head==NULL) return; if(head->lchild==NULL && head->rchild==NULL) return; //交换该结点的左右结点 treenode *temp=head->lchild; head->lchild=head->rchild; head->rchild=temp; //递归左子树 if(head->lchild) change(head->lchild); //递归右子树 if(head->rchild) change(head->rchild); }
测试代码以及运行结果:
标签:
原文地址:http://www.cnblogs.com/runninglzw/p/4540798.html