题解:
- 这里面myTree中的root成员是在main函数中声明,但在CreateTree中malloc,所以注意CreateTree函数要传引用。
题目:
问题 A: DS二叉树—二叉树构建与遍历(不含框架)
时间限制: 1 Sec 内存限制: 128 MB
提交: 498 解决: 384
[提交][状态][讨论版]
题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。
输入
第一行输入一个整数t,表示有t个二叉树
第二行起输入每个二叉树的先序遍历结果,空树用字符‘#’表示,连续输入t行。
输出
输出每个二叉树的先序遍历、中序遍历和后序遍历结果。
样例输入
2
AB#C##D##
AB##C##
样例输出
ABCD
BCAD
CBDA
ABC
BAC
BCA
代码块:
#include <iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} BiTNode;
typedef struct BiTree
{
BiTNode *root;
} BiTree;
void CreateTree(BiTNode *&p)
{
char c;
cin>>c;
if(c!='#')
{
p = new BiTNode;
p->data = c;
CreateTree(p->lchild);
CreateTree(p->rchild);
}
else
p = NULL;
}
void PreOrderTraverse(BiTNode *p)
{
if(p)
{
cout<<p->data;
PreOrderTraverse(p->lchild);
PreOrderTraverse(p->rchild);
}
}
void InOrderTraverse(BiTNode *p)
{
if(p)
{
InOrderTraverse(p->lchild);
cout<<p->data;
InOrderTraverse(p->rchild);
}
}
void PostOrderTraverse(BiTNode *p)
{
if(p)
{
PostOrderTraverse(p->lchild);
PostOrderTraverse(p->rchild);
cout<<p->data;
}
}
int main(void)
{
int t;
cin>>t;
while(t--)
{
BiTree myTree;
CreateTree(myTree.root);
PreOrderTraverse(myTree.root);
cout<<endl;
InOrderTraverse(myTree.root);
cout<<endl;
PostOrderTraverse(myTree.root);
cout<<endl;
}
return 0;
}
问题代码:
#include <iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} BiTNode;
typedef struct BiTree
{
BiTNode *root;
} BiTree;
BiTNode * CreateTree(BiTNode *p)
{
char c;
cin>>c;
if(c!='#')
{
p = new BiTNode;
p->data = c;
CreateTree(p->lchild);
CreateTree(p->rchild);
}
else
p = NULL;
return p;
}
void PreOrderTraverse(BiTNode *p)
{
if(p)
{
cout<<p->data;
PreOrderTraverse(p->lchild);
PreOrderTraverse(p->rchild);
}
}
void InOrderTraverse(BiTNode *p)
{
if(p)
{
InOrderTraverse(p->lchild);
cout<<p->data;
InOrderTraverse(p->rchild);
}
}
void PostOrderTraverse(BiTNode *p)
{
if(p)
{
PostOrderTraverse(p->lchild);
PostOrderTraverse(p->rchild);
cout<<p->data;
}
}
int main(void)
{
int t;
cin>>t;
while(t--)
{
BiTree myTree;
myTree.root = CreateTree(myTree.root);
PreOrderTraverse(myTree.root);
cout<<endl;
InOrderTraverse(myTree.root);
cout<<endl;
PostOrderTraverse(myTree.root);
cout<<endl;
}
return 0;
}