105. Construct Binary Tree from Preorder and Inorder Traversal
来源:互联网 发布:下载电驴软件 编辑:程序博客网 时间:2024/04/27 23:17
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
1.我的首先想法(递归建树) 但是超时了
/** * 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* buildTree(vector<int>& preorder, vector<int>& inorder) { int prelen = preorder.size(), inlen = inorder.size(); if(prelen == 0 && inlen == 0) return NULL; if(prelen == 1 && inlen == 1){ int res = preorder.front(); TreeNode* temp = new TreeNode(res); temp->left = NULL; temp->right = NULL; return temp; } int rootnum = preorder.front(); TreeNode* root = new TreeNode(rootnum); int i = 0; for(; i < inlen; i++){ if(inorder[i] == rootnum) break; } vector<int> pre_left(preorder.begin()+1,preorder.begin()+i+1); vector<int> pre_right(preorder.begin()+1+i,preorder.end()); vector<int> in_left(inorder.begin(), inorder.begin()+i); vector<int> in_right(inorder.begin()+i+1,inorder.end()); root->left = buildTree(pre_left, in_left); root->right = buildTree(pre_right, in_right); return root; } };
2.对以上的改写(之前这里超时,后来找到原因是因为:createTree函数里面的两个vector没有加引用&,我也不知道为什么没加就超时了,加了以后就好了)
/** * 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* buildTree(vector<int>& preorder, vector<int>& inorder) { int prelen = preorder.size(), inlen = inorder.size(); if(prelen == 0 && inlen == 0) return NULL; return createTree(preorder, inorder, 0, prelen-1, 0, inlen-1); } TreeNode* createTree(vector<int>& preorder, vector<int>& inorder, int pre_begin, int pre_end, int in_begin, int in_end){ if(pre_end < pre_begin || in_end < in_begin) return NULL; int rootnum = preorder[pre_begin]; TreeNode* root = new TreeNode(rootnum); int i = in_begin; for(; i <= in_end; i++){ if(inorder[i] == rootnum) break; } root->left = createTree(preorder, inorder, pre_begin+1, pre_begin+(i-in_begin), in_begin, i-1); root->right = createTree(preorder, inorder, pre_begin+(i-in_begin)+1, pre_end, i+1, in_end); return root; }};
3.别人的解法 迭代(还没看懂)
class Solution {public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { TreeNode *root=NULL; stack<TreeNode *> MyData; if(preorder.empty()) return root; root = new TreeNode(preorder[0]); MyData.push(root); int index = 0; for(int i=1; i<=preorder.size(); i++) { TreeNode *cur = MyData.top(); if((MyData.top()->val)!=inorder[index]) { cur->left = new TreeNode(preorder[i]); MyData.push(cur->left); } else { while(!MyData.empty() && ((MyData.top()->val)==inorder[index])) { cur=MyData.top(); MyData.pop(); index++; } if(index<inorder.size()) { cur->right = new TreeNode(preorder[i]); MyData.push(cur->right); } } } return root; }};
0 0
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
- [Leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode --- 105. Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]*105.Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode] 105.Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal LeetCode
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode#105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 用JS写Ajax的请求函数(1)
- Django迁移
- hdu 4823 Energy Conversion(水题)
- Must Know Tips/Tricks in Deep Neural Networks (by Xiu-Shen Wei)
- 快速排序
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- 华为手机无法打印log信息
- JavaScript 字符串不变性
- mybatis---源码分析----xml解析----XNode
- Java多线程知识小抄集(四)——完结
- css 背景
- mysql MHA主从切换问题实验总结
- 每天刷个算法题20160526:BFS解决八数码问题(九宫格问题)
- 不知道 Android 中 Gradle 的这些技巧,活该你加班