二叉树的遍历:前序、中序、后序遍历,递归
性质:
- 已知先序和中序,可以确定出二叉树
- 已知中序和后序,可以确定出二叉树
- 已知先序和后序,不可以确定出二叉树
// 链式存储结构
#include <bits/stdc++.h>
using namespace std;
struct node{
char data;
node *lchild, *rchild;
};
node *root;
// 按先序输入二叉树的结点,输入$表示空树
void build(node* &p){
char c;
scanf("%c", &c);
if (c == '$') p = NULL;
else{
p = new node();
p->data = c;
build(p->lchild); build(p->rchild);
}
}
void pre_order(node *p){
if (p == NULL) return;
if (p->data != '$') cout << p->data;
pre_order(p->lchild);
pre_order(p->rchild);
}
void in_order(node *p){
if (p == NULL) return;
in_order(p->lchild);
if (p->data != '$') cout << p->data;
in_order(p->rchild);
}
void post_order(node *p){
if (p == NULL) return;
post_order(p->lchild);
post_order(p->rchild);
if (p->data != '$') cout << p->data;
}
int main(){
build(root);
pre_order(root);
puts("");
in_order(root);
puts("");
post_order(root);
puts("");
return 0;
}
/*
输入:AB$$C$$
输出:
ABC
BAC
BCA
*/
例题,【例3-4】求后序遍历
//给出先序和中序,求后续
void dfs(int l1, int r1, int l2, int r2)
//根据先序l1位置的根,去找中序中根的位置
例题,【例3-5】扩展二叉树
//给出扩展二叉树的先序序列,输出中序和后序
//题解给出的是指针写法【指针】
例题,二叉树遍历(flist)
//给出中序序列和按层序列,求先序序列
//在按层遍历序列中先遇到根,在中序序列中,找到根的位置,break出来
//进行递归处理
void dfs(int l1, int r1, int l2, int r2)