Leetcode: Construct Binary Tree from Preorder and Inorder Traversal
2014-01-01 13:03
381 查看
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
比较基础的递归实现。
============================第二次=================================
/**
* Definition for binary tree
* 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) {
assert(preorder.size() == inorder.size());
return constructTree(preorder, 0, preorder.size(), inorder, 0, inorder.size());
}
TreeNode *constructTree(vector<int> &preorder, int pres, int pree, vector<int> &inorder, int ins, int ine) {
if (pres >= pree) {
return NULL;
}
int rootIndex = ins;
for (; rootIndex < ine; ++rootIndex) {
if (inorder[rootIndex] == preorder[pres]) {
break;
}
}
int leftNodes = rootIndex - ins;
TreeNode *root = new TreeNode(preorder[pres]);
root->left = constructTree(preorder, pres + 1, pres + 1 + leftNodes, inorder, ins, ins + leftNodes);
root->right = constructTree(preorder, pres + 1 + leftNodes, pree, inorder, rootIndex + 1, ine);
}
};
Note:
You may assume that duplicates do not exist in the tree.
比较基础的递归实现。
/** * Definition for binary tree * 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) { if (preorder.empty()) { return NULL; } return buildTreeUtil(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1); } TreeNode *buildTreeUtil(vector<int> &preorder, int prestart, int preend, vector<int> &inorder, int instart, int inend) { if (prestart == preend) { return new TreeNode(preorder[prestart]); } else if (prestart > preend) { return NULL; } else { int mid = preorder[prestart]; int mid_index = findInVector(inorder, instart, inend, mid); int left = mid_index - instart; TreeNode *root = new TreeNode(mid); root->left = buildTreeUtil(preorder, prestart + 1, prestart + left, inorder, instart, mid_index - 1); root->right = buildTreeUtil(preorder, prestart + left + 1, preend, inorder, mid_index + 1, inend); return root; } } int findInVector(vector<int> &order, int start, int end, int target) { for (int i = start; i <= end; ++i) { if (order[i] == target) { return i; } } return -1; } };
============================第二次=================================
/**
* Definition for binary tree
* 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) {
assert(preorder.size() == inorder.size());
return constructTree(preorder, 0, preorder.size(), inorder, 0, inorder.size());
}
TreeNode *constructTree(vector<int> &preorder, int pres, int pree, vector<int> &inorder, int ins, int ine) {
if (pres >= pree) {
return NULL;
}
int rootIndex = ins;
for (; rootIndex < ine; ++rootIndex) {
if (inorder[rootIndex] == preorder[pres]) {
break;
}
}
int leftNodes = rootIndex - ins;
TreeNode *root = new TreeNode(preorder[pres]);
root->left = constructTree(preorder, pres + 1, pres + 1 + leftNodes, inorder, ins, ins + leftNodes);
root->right = constructTree(preorder, pres + 1 + leftNodes, pree, inorder, rootIndex + 1, ine);
}
};
相关文章推荐
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: 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 | Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode dfs Construct Binary Tree from Preorder and Inorder Traversal
- 【LeetCode-105】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(18):Construct Binary Tree from Preorder and Inorder (Inorder and Postorder) Traversal 分类: leetCode 2015-06-22 08:26 177人阅读 评论(0) 收藏
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal @ Python
- LeetCode_Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105. 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-105:Construct Binary Tree from Preorder and Inorder Traversal (利用先序和中序遍历构建二叉树) -- medium
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal