由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)
今天Val来分享如何利用一个前序遍历和中序遍历来重建二叉树,及代码的实现。
首先我们知道二叉树前序遍历顺序是:遇到一个节点先访问它的根节点再是左节点后访问右节点。
中序:先访问左节点再访问根节点后访问右节点。
如图:
下面以图中二叉树为例子讲解:
由前序遍历结果我们可以知道每次遍历的根节点root;中序遍历可以得知根节点的左和右树,然后将树分成两部分重建二叉树,这样范围不断缩小,利用递归来建这棵树。
比如第一次,前序遍历第一个节点 根节点,由中序遍历知道,123为根节点(4)的左子树中节点,65为它的右树节点,然后划分为两部分,再进行建树。
传入参数第一个:存放前序遍历节点的字符串
第二个: 存放中序遍历节点的字符串
第三个: 存放中序遍历节点的字符串+(字符串长度-1)
Node* ReBuildTree(char* prev, char* instart, char* inend)
{
if (*prev == '\0')
{
return NULL;