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.
/** * 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, int preorderStart,int preorderEnd,vector<int>& inorder,int inorderStart,int inorderEnd) { if(preorderEnd-preorderStart==1){ return new TreeNode(preorder[preorderStart]); } if(preorderEnd-preorderStart==0){ return 0; } int val = preorder[preorderStart]; int i=inorderStart; for(;i<inorderEnd;i++){ if(inorder[i] == val){ break; } } TreeNode *root = new TreeNode(val); int leftLen = i-inorderStart; int rightLen = inorderEnd - i - 1; root->left = buildTree(preorder,preorderStart+1,preorderStart+1+leftLen,inorder,inorderStart,inorderStart+leftLen); root->right = buildTree(preorder,preorderStart+1+leftLen,preorderEnd,inorder,inorderStart+leftLen+1,inorderEnd); return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int preorederSize = preorder.size(); int inorederSize = inorder.size(); if(preorederSize != inorederSize){ return NULL; } return buildTree(preorder,0,preorder.size(),inorder,0,inorder.size()); } };
写者:zengzy
出处: http://www.cnblogs.com/zengzy
标题有【转】字样的文章从别的地方转过来的,否则为个人学习笔记