知识点:
- 根据前序遍历和中序遍历还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
根据二叉树的性质,如果我们只给出二叉树的一种遍历方式的结果,不能完全确定一颗二叉树,这时的二叉树可能具有多种形态。但是当我们给出一颗二叉树的两种不同遍历方式的时候,就可以完全确定一颗二叉树。
这里以前序遍历和中序遍历为例。
假如我们给出两棵二叉树的前中序遍历分别为
前序遍历:ABDFGHIEC
中序遍历:FDHGIBEAC
- 由前序遍历的性质,我们可以知道 A 一定是这棵树的根结点
- 根据中序遍历可知, A 左边的一定是 A 的左子树,A 右边的一定是 A 的右子树
- 同理,B 为 A 的左子树的根结点……
- 如此递归下去就可以生成一颗确定的二叉树
由此,我们就可以写出递归的还原二叉树的代码:
#include <iostream>
#include <string>
using namespace std;
struct node {
char data;
node *left, *right;
node(char _data): data(_data),