[leetcode] Construct Binary Tree from Preorder and Inorder Traversal
来源:互联网 发布:jsp获取mac 编辑:程序博客网 时间:2024/06/09 16:43
Construct Binary Tree from Preorder and Inorder Traversal
class Solution {public: TreeNode *buildTreebyIndex(vector<int> &preorder,int preBegin,int preEnd,vector<int> &inorder,int inBegin,int inEnd){ if (preBegin>preEnd||inBegin>inEnd) { return nullptr; } int val=preorder[preBegin]; int index; for (int i=inBegin; i<=inEnd; i++) { if (val==inorder[i]) { index=i; break; } } int len=index-inBegin; TreeNode *pleft=buildTreebyIndex(preorder, preBegin+1, preBegin+len, inorder, inBegin, index-1); TreeNode *pright=buildTreebyIndex(preorder, preBegin+len+1, preEnd, inorder, index+1, inEnd); TreeNode *node=new TreeNode(val); node->left=pleft; node->right=pright; return node; } TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { if (preorder.size()==0) { return nullptr; } return buildTreebyIndex(preorder,0,preorder.size()-1,inorder,0,inorder.size()); }};
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* buildTreeHelper(vector<int>& preorder,vector<int>& inorder,int fromp,int fromi,int length){ if(length==0){ return 0; } TreeNode *root=new TreeNode(preorder[fromp]); int i=fromi; for(;inorder[i]!=preorder[fromp];++i);//找到对应的root在中序遍历中的位置 root->left=buildTreeHelper(preorder,inorder,fromp+1,fromi,i-fromi); root->right=buildTreeHelper(preorder,inorder,fromp+1+i-fromi,i+1,length-i-1+fromi);//长度更新为length-i-1+fromi return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return buildTreeHelper(preorder,inorder,0,0,preorder.size());//from 0 ... }};
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode helper(int[] preorder,int[] inorder,int fromp,int fromi,int len){ if(len==0){ return null; } TreeNode node=new TreeNode(preorder[fromp]);//(子)树的根 int i=fromi; for(;inorder[i]!=preorder[fromp];++i);//找到对应的根所在的位置 node.left=helper(preorder,inorder,fromp+1,fromi,i-fromi); node.right=helper(preorder,inorder,fromp+1+i-fromi,i+1,len-1-i+fromi); return node; } public TreeNode buildTree(int[] preorder, int[] inorder) { return helper(preorder,inorder,0,0,preorder.length); }}
测试程序
public class Test1031 {public static void main(String[] args) {Solution st=new Solution();int[] preorder={1,2};int[] inorder={1,2};TreeNode node=st.buildTree(preorder, inorder);printNode(node);}public static void printNode(TreeNode node) {if (node == null) {return;}else{//必须放在else内部,否则会莫名报错System.out.println(node.val);printNode(node.left);printNode(node.right);}}}
0 0
- *(leetcode) Construct Binary Tree from Preorder and Inorder Traversal (tree)
- LeetCode[Tree]: Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode][tree] Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- [Leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode: Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 109: Construct Binary Tree from Preorder and Inorder Traversal
- 【leetcode】Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode-Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode - Construct Binary Tree from Preorder and Inorder Traversal
- [leetCode] Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal
- Java web AJAX入门
- SWTO分析法
- 【PhoneGAP学习】Android PhoneGap框架(3)--重要知识点的预先学习 (JS层与 Native 层之间通信)
- 如何使用eclipse进行hibernate 快速开发
- OpenCV_局部图像特征的提取与匹配_源代码
- [leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- 考研复试机试题(2010)
- OpenCV——HoG特征
- [leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- 浅谈鼠标滚轮事件
- 背景建模(一) Evaluation of Background Subtraction Techniques
- Swig将C++编译lib项目转换为C#可引用的dll[勘误后]
- 番茄学习方法
- 《Python网络编程基础》笔记(一)----底层网络