题解 | #重建二叉树#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

法一:三指针

  • preStart,他表示的是前序遍历开始的位置;
  • inStart,他表示的是中序遍历开始的位置;
  • inEnd,他表示的是中序遍历结束的位置。 找到了前序遍历的结点在中序遍历的位置,我们就可以把中序遍历数组分解为两部分了
    [0,index -1]就是根节点左子树的所有节点,
    [index+1,inorder. length-1]就是根节点右子树的所有节点。

    alt

法二:使用Arraylist

先把数组转化为list集合,然后在list集合中进行截取,这样效率明显不是很高,实际上我们还可以不使用list,不对数组进行截取。

int mid = inorderList.indexOf(rootVal);
root.left = helper(preorderList, inorderList.subList(0, mid));
root.right = helper(preorderList, inorderList.subList(mid + 1, inorderList.size()));

法三:使用栈

  • 前序遍历挨着的两个值比如m和n;
  • 如果m的左子树不为空,那么n就是m左子树节点的值;
  • 如果一个结点没有左子树只有右子树,那么n就是m右子树节点的值;
  • 如果一个结点既没有左子树也没有右子树,那么n就是m某个祖先节点的右节点 alt alt
全部评论

相关推荐

02-28 01:18
已编辑
南昌大学 后端工程师
后测速成辅导一两个月...:把开源经历放个人项目上边应该更好,就像大部分人都把实习经历放个人项目上边
点赞 评论 收藏
分享
白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务