LeetCode:Construct Binary Tree from Preorder and Inorder Traversal
2014-09-12 20:06
513 查看
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
代码如下:
运行结果:
Given preorder and inorder traversal of a tree, construct the binary tree.
代码如下:
/*根据前序遍历的序列和中序遍历的序列求出整个树*/ #include <iostream> #include <exception> #include <vector> #include <stdio.h> using namespace std; struct TreeNode { TreeNode* left; TreeNode* right; int val; TreeNode(int x):val(x),left(NULL),right(NULL){} }; class Solution { public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { int prelength = preorder.size(); int inlength = inorder.size(); vector<int>::iterator itr = preorder.begin(); TreeNode *root; if(prelength == inlength) { if(prelength == 0) return NULL; if(prelength == 1 && preorder[0]==inorder[0]){ root = new TreeNode(0); root->val = preorder[0]; return root; } } else throw exception(); root = buildNode(preorder, inorder, 0,prelength-1,0,inlength-1); return root; } void PrintTree(TreeNode *node) { if(!node) return; else { if(node ->left) PrintTree(node->left); if(node ->right) PrintTree(node->right); cout << node -> val <<'\t'; } } TreeNode *buildNode(vector<int> &preorder,vector<int> &inorder,int pre_start,int pre_end,int in_start,int in_end) { TreeNode *root = new TreeNode(0); //在前序遍历中首先找到根节点 root->val = preorder[pre_start]; //再在中序遍历中找到根节点 int root_index = 0; for(int i = in_start; i <= in_end; i++) { if(inorder[i] == root->val) { root_index = i; if(root_index == in_start) root->left = NULL; else { int length = root_index - in_start; root->left = buildNode(preorder,inorder,pre_start+1,pre_start+length,in_start,root_index-1); } if(root_index == in_end) root->right = NULL; else { int length = in_end - root_index; root->right = buildNode(preorder,inorder,pre_end-length+1,pre_end,root_index+1,in_end); } return root; } } } }; void Test1() { const int length = 8; int pre[length] = {1,2,4,7,3,5,6,8}; int in[length] = {4,7,2,1,5,3,8,6}; vector<int> preorder,inorder; for(int i = 0; i < length; i++) { preorder.push_back(pre[i]); inorder.push_back(in[i]); } Solution sol; TreeNode *node = NULL; node = sol.buildTree(preorder,inorder); cout << "The post_order is :"; sol.PrintTree(node); cout << endl; return; } int main() { Test1(); system("PAUSE"); return 0; }
运行结果:
相关文章推荐
- [leetcode刷题系列]Construct Binary Tree from Preorder and Inorder Traversal
- functionclass[LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode - Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal (中序和后序建树,在题目给的函数中完成)【leetcode】
- 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 78] 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, Solution
- 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