【20200925 每日一题】刷题使我快乐。本文题解及更多题解请见我的GitHub。
106 从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树
难度中等
根据一棵树的中序遍历与后序遍历构造二叉树。 注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
解法一 迭代 划定数组范围
/**
解法二 另一种迭代 利用HashMap查找位置
非常妙的一点是,再也没有记录postorder的起始位置了。而是只保留了一个整型变量root来找出每一次的根。由于后序遍历是最后才遍历到根,每次遍历一个节点,root--。
注意,这里curr.right和curr.left的生成顺序不能调换。这是由于后序遍历的顺序造成的。
class
105 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
与此同时,从前序和中序遍历序列构造二叉树是完全可行的。事实上,由于前序与后序的某种“对称性”,只需要在前者的结果上稍加改动,就可以得到后者的答案。
解法一
/**
解法二
class
那么由前序后序构造二叉树是否可行呢?
的确可以构造出二叉树来,但这样的二叉树是不唯一的。
下次有机会讲讲这个。
欢迎点赞、评论、分享本文并且关注我的GitHub。
你所有的互动都是我坚持写下去的动力,谢谢。
以上。