题目:
将树所有节点的左、右子树交换。并输出交换后的先序列。
思路:
- 使用递归 需要的辅助参数 treenode *p;
- 子树交换 p = t->rchild; t->rchild = t->lchild; t->lchild = p;
- 对左右子树进行递归。
测试用例:
ABD##E##CF##G## 结果 :ACGFBED
代码实现:
#include <iostream>
using namespace std;
#define MAX 20
typedef struct treenode{
char data;
struct treenode *lchild,*rchild;
}treenode,*tree;
void buildtree(tree &t){
char ch;
ch = getchar();
if(ch=='#') t = NULL;
else{
t = (treenode *)malloc(sizeof(treenode));
t->data = ch;
t->lchild = NULL;
t->rchild = NULL;
buildtree(t->lchild);
buildtree(t->rchild);
}
}
void swaplr(tree &t){
treenode *p;
p = t->rchild;
t->rchild = t->lchild;
t->lchild = p;
if(t->lchild!=NULL) swaplr(t->lchild);
if(t->rchild!=NULL) swaplr(t->rchild);
}
void outs(tree t){
if(t){
cout<<t->data;
outs(t->lchild);
outs(t->rchild);
}
}
int main(){
tree t;
buildtree(t);
outs(t);
swaplr(t);
cout<<endl;
outs(t);
}
|