排序二叉树的中序遍历序列是有序序列_LeetCode 0106 从中序与后序遍历序列构造二叉树 + 0105...

【20200925 每日一题】刷题使我快乐。本文题解及更多题解请见我的GitHub。

0226d34f8a58d00a3350165061840e7a.png
本文题解已上传

106 从中序与后序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树
难度中等
根据一棵树的中序遍历与后序遍历构造二叉树。 注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:

81d6e69b04061ca007c72913f052965d.png

解法一 迭代 划定数组范围

5983eec24a9ed833a62c9aed7d23e348.png
/**

解法二 另一种迭代 利用HashMap查找位置

非常妙的一点是,再也没有记录postorder的起始位置了。而是只保留了一个整型变量root来找出每一次的根。由于后序遍历是最后才遍历到根,每次遍历一个节点,root--。

注意,这里curr.right和curr.left的生成顺序不能调换。这是由于后序遍历的顺序造成的。

776ffd95a771d540240f5ecbf452c8f3.png
class 

105 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

81d6e69b04061ca007c72913f052965d.png

与此同时,从前序和中序遍历序列构造二叉树是完全可行的。事实上,由于前序与后序的某种“对称性”,只需要在前者的结果上稍加改动,就可以得到后者的答案。

解法一

ce92293607700279d287746af0e2e866.png
/**

解法二

fe6423543b5fd4bc1165cdd032154198.png
class 

那么由前序后序构造二叉树是否可行呢?

的确可以构造出二叉树来,但这样的二叉树是不唯一的。

下次有机会讲讲这个。

欢迎点赞、评论、分享本文并且关注我的GitHub。

你所有的互动都是我坚持写下去的动力,谢谢。

以上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值