vlambda博客
学习文章列表

每日算法--根据前序中序遍历重构二叉树



心之所向


每日算法--根据前序中序遍历重构二叉树

素履以往


最近听《大秦赋》秦孝公求贤令;叹技术不硬,奈何机会摆在眼前也是无用。


前序遍历 preorder = [3920157]

中序遍历 inorder = [9315207];


那么根据这个两种遍历方式如何递归出二叉树。来源:力扣(LeetCode)


二叉树前序遍历的顺序为:


  • 先遍历根节点;

  • 随后递归地遍历左子树;

  • 最后递归地遍历右子树。


二叉树中序遍历的顺序为:


  • 先递归地遍历左子树;

  • 随后遍历根节点;

  • 最后递归地遍历右子树。



每日算法--根据前序中序遍历重构二叉树


  • 1、根据前序遍历第一个根节点在中序遍历中找出根节点index

  • 2、根据中序遍历根节点index能圈定左子树和右子树节点

  • 3、根据中序遍历左子树范围能确定前序遍历中左子树

  • 4、就可以获得前序左子树的边界值

  • 5、根据边界值递归遍历就知道左子树和右子树节点位置


JS编码实现:

每日算法--根据前序中序遍历重构二叉树


JAVA编码实现:

每日算法--根据前序中序遍历重构二叉树


debug结果展示:

每日算法--根据前序中序遍历重构二叉树


重构的二叉树


leetCode另一种JavaScript实现(转载