【原创】leetCodeOj ---Construct Binary Tree from Preorder and Inorder Traversal 解题报告
2014-11-16 00:19
429 查看
原题地址:
https://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
题目内容:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
方法:
非常单纯的递归应用。当然首先你需要知道什么叫前序遍历,什么叫中序遍历。我们可以通过前序和中序遍历来构造一棵树,这个过程是递归的。
首先,我们拿到了两个序列。
其次,我们根据前序遍历序列,获得了树根,new一个树根。
然后,我们找到树根在中序遍历的位置,然后就知道左右子树的范围了。
最后,递归处理左右子树
PS:利用后序遍历和中序遍历来构造一棵树也是一样道理,关键有两点,一是找根,而是确定子树范围。
全部代码:
https://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
题目内容:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
方法:
非常单纯的递归应用。当然首先你需要知道什么叫前序遍历,什么叫中序遍历。我们可以通过前序和中序遍历来构造一棵树,这个过程是递归的。
首先,我们拿到了两个序列。
其次,我们根据前序遍历序列,获得了树根,new一个树根。
然后,我们找到树根在中序遍历的位置,然后就知道左右子树的范围了。
最后,递归处理左右子树
PS:利用后序遍历和中序遍历来构造一棵树也是一样道理,关键有两点,一是找根,而是确定子树范围。
全部代码:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0) return null; return trueStuff(preorder,0,preorder.length - 1,inorder,0,inorder.length - 1); } private TreeNode trueStuff(int[] pre,int startp,int finp,int[] in,int starti,int fini) { if (startp == finp) return new TreeNode(pre[startp]); if (startp > finp) return null; TreeNode tmp = new TreeNode(pre[startp]); int pos = findIndex(in,starti,fini,pre[startp]); if (pos == -1) return null; tmp.left = trueStuff(pre,startp + 1,startp + pos - starti,in,starti,pos - 1); tmp.right = trueStuff(pre,startp + pos - starti + 1,finp,in,pos + 1,fini); return tmp; } private int findIndex(int[] in,int start,int fin,int target) { for (int i = start;i <= fin;i++) if (in[i] == target) return i; return -1; } }
相关文章推荐
- 【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告
- 【原创】leetCodeOj --- Word Ladder II 解题报告 (迄今为止最痛苦的一道题)
- 【原创】leetCodeOj --- Find Minimum in Rotated Sorted Array II 解题报告
- 【原创】leetCodeOj --- Copy List with Random Pointer 解题报告
- 【原创】leetCodeOj ---Partition List 解题报告
- 【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)
- 【原创】leetCodeOj --- Find Peak Element 解题报告
- 【原创】leetCodeOj --- Interleaving String 解题报告
- 【原创】leetCodeOj --- Intersection of Two Linked Lists 解题报告(经典的相交链表找交点)
- 【原创】leetCodeOj --- Sort List 解题报告
- 【原创】leetCodeOj --- Excel Sheet Column Title 解题报告
- 【原创】leetCodeOj --- Fraction to Recurring Decimal 解题报告
- 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告
- 【原创】leetCodeOj --- Min Stack 解题报告
- 【原创】leetCodeOj --- Largest Number 解题报告
- 【原创】leetCodeOj --- Repeated DNA Sequences 解题报告
- 【原创】leetCodeOj --- Candy 解题报告
- 【原创】poj ----- 2524 Ubiquitous Religions 解题报告
- 【原创】poj ----- 1611 The Suspects 解题报告
- 【原创】poj ----- 1182 食物链 解题报告