【LeetCode】Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:java无限循环停止代码 编辑:程序博客网 时间:2024/06/06 20:44
/** * 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> &inorder, vector<int> &postorder){TreeNode *root;root = (TreeNode*)malloc(sizeof(TreeNode));if (inorder.empty() || postorder.empty())return NULL;elseroot = rebuild(postorder, 0, postorder.size() - 1, inorder, 0, inorder.size() - 1);return root;}TreeNode *rebuild(vector<int> &postorder,int pbegin,int pend,vector<int> &inorder,int ibegin,int iend){int root,index,i;if (postorder.empty() || inorder.empty() || pbegin > pend || ibegin > iend)return NULL;root = postorder[pend];for (i = ibegin; i <= iend; i++){if (root == inorder[i]){index = i;break;}}int len = index - ibegin;TreeNode *left = rebuild(postorder,pbegin,pbegin+len-1,inorder,ibegin,index-1);TreeNode *right = rebuild(postorder,pbegin+len,pend-1,inorder,index+1,iend);TreeNode *node = new TreeNode(root);node->left = left;node->right = right;return node;}};

0 0