我们的问题是:
给出一棵二叉树的先序遍历与中序遍历,如何构建出这棵二叉树呢?
我们知道,二叉树的先序遍历遍历的第一个点一定是根节点,所以根节点一定是A。
在中序遍历中,根节点一定是在最中间的,所以中序遍历中A左边的节点都在A的左子树上,右边的节点都在A的右子树上。
那么我们就衍生出了一个子问题:
若有一棵二叉树,先序遍历为:B D E H I,中序遍历为:D B H E I,构建出的是什么样的二叉树。二这课构建出来的二叉树就是A节点的左子树。
显然,A节点左子树的根节点是B节点,而B节点的左节点是D,右子树包括节点H、E 、I,且我们知道右子树的先序遍历与中序遍历。
接着我们构建B节点的右子树,明显可见根节点为E,E的左节点为H,右节点为I。
同样的,我们可以构建出A节点的右子树为:
所以最后构建出来的二叉树就是: