问题描述:
Given preorder and inorder traversal of a tree, construct the binary tree.(意思很简单,给出先序和中序遍历的序列,构造出这棵二叉树)
Note:
You may assume that duplicates do not exist in the tree.
示例:其实这个图我在上一篇文章就给出了,现在再次给出此图,以便帮助大家理解。
问题来源:Preorder and Inorder Traversal (具体链接:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/#/description)
思路:这道题的思路其实和给出中序后序遍历结果给出求二叉树给出中序后序求二叉树 没啥区别。首先都是确定根节点,顺着根节点确定在中序序列中的索引,在中序序列中,索引左侧的节点便构成左子树,而右边的节点则构成右子树,接着分别在左子树和右子树递归,即分别求根节点和左子树与右子树,直到所有节点被确定好了为止。
代码:
节点的定义(题目给出的定义):
构造二叉树代码:
虽然在前文中介绍了各个参数,其实是相似的,在这还是罗列一下:
a)第一个:先序遍历结果preorder;
b)第二个:先序遍历结果的首指针pre_start;
c)第三个:先序遍历结果的尾指针pre_end(一首一尾的作用是定位哪些为左子树,哪些为右子树);
d)第四个:中序遍历结果inorder;
e)第五个:中序遍历的首指针in_start;
f)第六个:中序遍历的尾指针(作用同上)in_end;
g)第七个:用于存取索引的map。