【题目链接】
【题目考点】
1. 二叉树
【解题思路】
解法1:
用getchar()或cin.get()每次读取一个字符。
先序序列的格式为:<根结点> <左子树的先序序列> <右子树的先序序列>
可以用递归的方法构建二叉树:
- 读入一个字符,作为根结点
- 递归构建左子树
- 递归构建右子树
- 将左右子树接在这棵树根结点的下面,返回根结点的地址
完成树的构建后,再输出这棵树的中序和后序遍历序列。
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
struct Node//二叉树结点
{
char val;
int left, right;
};
Node node[1005];//结点池
int p;
void inOrder(int r)//中序遍历
{
if(r == 0)
return;
inOrder(node[r].left);
cout << node[r].val;
inOrder(node[r].right);
}
void postOrder(int r)//后序遍历
{
if(r == 0)
return;
postOrder(node[r].left);
postOrder(node[r].right);
cout << node[r].val;
}
int createTree(char val)//传入要生成的二叉树的根的值,返回生成的二叉树的地址
{
if(val == '.')
return 0;
else
{
int np = ++p;
node[np].val = val;
node[np].left = createTree(cin.get());
node[np].right = createTree(cin.get());
return np;
}
}
int main()
{
int root = createTree(cin.get());
inOrder(root);
cout << endl;
postOrder(root);
return 0;
}