前序遍历:根 左 右
中序遍历:左 根 右
-
先根据前序遍历,得到根节点3,然后看中序遍历,可以知道9是3的左孩子[15,20,7]是3的右孩子
-
再去先序遍历的到9,再到中序遍历可知,9左右孩子都为空,
-
再根据前序遍历得到根节点20,再根据中序遍历得到20的左子树是15, 右子树是17;
总结: 先根据先序遍历得到根节点,在去中序遍历中根据根节点找到左右两个子树。重复上述步骤即可
思想有了,代码实现起来还是……有点问题
-
为了能够快速在中序遍历得到根节点的位置这里使用哈希表,遍历中序树将每个数存储在哈希表中。
-
如何得到左子树前序遍历的端点?这是一个难点,即图中红色箭头的位置。
我们知道左子树的中序遍历和左子树的前序遍历长度是一致的.假设左子树前序遍历的右端点为x;
k - 1 - il + 1 = x - (pl + 1) + 1