Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:什么桌面壁纸软件好 编辑:程序博客网 时间:2024/06/06 17:10
/** * 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) {        if(inorder.empty() || postorder.empty()) return NULL;return buildTree(inorder,0,inorder.size()-1,postorder,0,postorder.size()-1);    }TreeNode *buildTree(const vector<int> &inorder,int inLeft,int inRight,const vector<int> &postorder,int postLeft,int postRight){if(inLeft>inRight || postLeft>postRight) return NULL;//根节点TreeNode *root=new TreeNode(postorder[postRight]);//计算左子树结点数int i=0;for(i=inLeft;i<=inRight;i++){if(inorder[i]==postorder[postRight]){break;}}const int leftSubTree=i-inLeft;root->left=buildTree(inorder,inLeft,i-1,         postorder,postLeft,postLeft+leftSubTree-1);root->right=buildTree(inorder,i+1,inRight, postorder,postLeft+leftSubTree,postRight-1);return root;}};

0 0