106. Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:java免费报表开发工具 编辑:程序博客网 时间:2024/06/07 07:25
  1. /** 
  2.  * Definition for binary tree 
  3.  * struct TreeNode { 
  4.  *     int val; 
  5.  *     TreeNode *left; 
  6.  *     TreeNode *right; 
  7.  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 
  8.  * }; 
  9.  */  
  10. class Solution {  
  11. public:  
  12.     void createTree(TreeNode *p, vector<int> &inorder, int istart, int iend, vector<int> &postorder, int pstart, int pend, int flag){  
  13.         if(pstart > pend) return;  
  14.         p = new TreeNode(postorder[pend]);  
  15.         if(root == NULL) root = pNode = p;  
  16.         else{  
  17.             if(flag) pNode->right = p;    //  将这颗树连接起来  
  18.             else pNode->left = p;  
  19.             pNode = p;  
  20.         }  
  21.         if(pstart == pend) return;  
  22.         int i = istart;  
  23.         for(; i<= iend; i++){  
  24.             if(inorder[i] == postorder[pend]) break;  
  25.         }  
  26.         int k = i - istart;  
  27.         createTree(p->left, inorder, istart, i-1, postorder, pstart, pstart+k-1, 0);   // 创建左子树  
  28.         pNode = p;  
  29.         createTree(p->right, inorder, i+1, iend, postorder, pstart+k, pend-1, 1);   // 创建右子树  
  30.           
  31.     }  
  32.     TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {  
  33.         root = pNode = NULL;  
  34.         int n = inorder.size();  
  35.         if(n == 0) return root;  
  36.         createTree(root, inorder, 0, n-1, postorder, 0, n-1, 0);  
  37.         return root;  
  38.           
  39.           
  40.     }  
  41. private:  
  42.     TreeNode *root, *pNode;  
  43.   
  44. };  
阅读全文
0 0
原创粉丝点击