内容简介:Given inorder and postorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree.
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3] Return the following binary tree: 3 / \ 9 20 / \ 15 7
难度:medium
题目:给定二叉树中序及后序遍历,构造二叉树,注意二叉树中的结点不重复。
思路;分治。
- 从后序遍历数组中由后向前取结点r
- 在中序遍历中找到r的位置,并由此结点分成两部分,继续执行1.
Runtime: 4 ms, faster than 68.02% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.
Memory Usage: 37.6 MB, less than 42.45% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if (null == postorder || postorder.length < 1) { return null; } return buildTree(inorder, 0, inorder.length - 1, postorder, postorder.length - 1); } public TreeNode buildTree(int[] inorder, int start, int end, int[] postorder, int idx) { if (start > end || idx < 0) { return null; } TreeNode root = new TreeNode(postorder[idx]); int rIdx = start; for (; rIdx <= end; rIdx++) { if (inorder[rIdx] == postorder[idx]) { break; } } root.left = buildTree(inorder, start, rIdx - 1, postorder, idx - (end - rIdx) - 1); root.right = buildTree(inorder, rIdx + 1, end, postorder, idx - 1); return root; } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
构建之法(第二版)
邹欣 / 人民邮电出版社 / 2015-7 / 59
软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。作者邹欣有长达20年的一线软件开发经验,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划,并得到高校师生的积极反馈。在此基础上,作者对......一起来看看 《构建之法(第二版)》 这本书的介绍吧!