WAY 1. 由先序和中序遍历序列确定一棵二叉树,再后序遍历得到后序序列。
如何确定呢?
1. 根据先序遍历的第一个结点确定根节点;
2. 根据根节点在中序遍历序列的位置分割出左右两个子序列,即根节点的左右子树;
3. 对左右子树按此方法递归进行分解。
定义二叉树的数据结构:
typedef struct TreeNode *BinTree;
struct TreeNode{
char key;
BinTree left;
BinTree right;
TreeNode(char _key):key(_key), left(NULL), right(NULL){}
};
由先序中序序列创建二叉树:
BinTree buildTree(char* pre, char* in, int n) //n是当前树中的结点数
{
if(n == 0) return NULL;
BinTree node = new TreeNode(*pre);
int i;
for(i = 0; i < n && in[i] != *pre; ++i) //确定根节点在中序序列中的位置