问题描述】编写复制一颗二叉树树的非递归算法。
【输入形式】先序序列创建二叉树,数据类型为字符型,空结点用'*'表示。
【输出形式】<中序输出该二叉树,以空格分隔数据><回车><中序输出复制后的二叉树,以空格分隔数据>
【样例输入】ABC**D**CE**F**
【样例输出】
C B D A E C F
C B D A E C F
【样例说明】
【评分标准】
tips:这道题很简单 基本没什么考的 传入传出
唯一就是复制操作时 根值传递完成后:将”新树“的”左右孩子指针“分别被递归调用该函数《赋值》(当前树的左右孩子作为参传入)
BiTree Copy(BiTree &T)
{
if (T)
{
BiTree T1;
T1 = new BiTNode;
T1->data = T->data;
T1->lc = Copy(T->lc);
T1->rc = Copy(T->rc);
}
return T;
}
总代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;;
typedef struct tree
{
char data;
struct tree *lc, *rc;
}BiTNode,*BiTree;
void Creat(BiTree &T)
{
char val;
cin >> val; //首先判断传入的值 有可能第一个就是空子树!!!
if (val == '*') //首先传入的为空
T = NULL;
else { //再判断不为空的情况 进行正常操作
T = new BiTNode; //给T创空间时 T为BiNode类型!!!
T->data = val;
Creat(T->lc);
Creat(T->rc);
}
}
void Midorder(BiTree &T)
{
if (T)
{
Midorder(T->lc);
cout << T->data<<" ";
Midorder(T->rc);
}
}
BiTree Copy(BiTree &T)
{
if (T)
{
BiTree T1;
T1 = new BiTNode;
T1->data = T->data;
T1->lc = Copy(T->lc);
T1->rc = Copy(T->rc);
}
return T;
}
int main()
{
BiTree T;
Creat(T);
BiTree T1=Copy(T);
Midorder(T);
cout << "\n";
Midorder(T1);
return 0;
}