每日算法--根据前序中序遍历重构二叉树
心之所向
素履以往
最近听《大秦赋》秦孝公求贤令;叹技术不硬,奈何机会摆在眼前也是无用。
前序遍历 preorder = [3, 9, 20, 15, 7]
中序遍历 inorder = [9, 3, 15, 20, 7];
那么根据这个两种遍历方式如何递归出二叉树。来源:力扣(LeetCode)
二叉树前序遍历的顺序为:
先遍历根节点;
随后递归地遍历左子树;
最后递归地遍历右子树。
二叉树中序遍历的顺序为:
先递归地遍历左子树;
随后遍历根节点;
最后递归地遍历右子树。
1、根据前序遍历第一个根节点在中序遍历中找出根节点index
2、根据中序遍历根节点index能圈定左子树和右子树节点
3、根据中序遍历左子树范围能确定前序遍历中左子树
4、就可以获得前序左子树的边界值
5、根据边界值递归遍历就知道左子树和右子树节点位置
JS编码实现:
JAVA编码实现:
debug结果展示:
重构的二叉树
leetCode另一种JavaScript实现(转载)