二叉树 中序遍历 python_每日LeetCode,从前序与中序遍历序列构造二叉树

cdb6f5d58237eab33b2f28765073e46d.png
105. 从前序与中序遍历序列构造二叉树​leetcode-cn.com

学会这一道,大部分的树的问题都可以解决,除了关于树图的问题

根据一棵树的前序遍历与中序遍历构造二叉树。 注意:
你可以假设树中没有重复的元素。

例如:

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3
   / 
  9  20
    /  
   15   7

思路:

首先了解概念

前序遍历:中 左 右 遍历树,中在最前

中序遍历:左 中 右 遍历树,中在中间

那么,前序遍历的数组中的每个元素都可以将中序遍历的数组划分为左子树数组和右子树数组

比方说,上面的举例,取出前序遍历的3,那么中序遍历数组就可以被划分为:

[9] [3] [15,20,7]

是不是想到用递归就可以做啦

事实上,凡是树的问题,90%以上都可以用递归

[3]生成树之后,在对它左子树和右子树做同样操作即可

代码:

int 

复杂度:

时间:O(nlogn)

空间:O(n)

84140ef057233565f842e3931c54985d.png

上面的速度太慢,羞耻

我们稍微优化下,将找划分位置的地方修改下,通过HashMap存储中序遍历所有元素的位置

这样查找只需要O(1)的速度

代码:

int 

复杂度:

时间:O(n)

空间:O(n)

6b083531ae71d7b7b62e382279056d27.png

打完收工(*^_^*)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值