105. Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:java免费报表开发工具 编辑:程序博客网 时间:2024/06/06 19:46
  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> &preorder, int pstart, int pend, vector<int> &inorder, int istart, int iend, int flag){  
  13.         if(pstart > pend) return;  
  14.         p = new TreeNode(preorder[pstart]);  
  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] == preorder[pstart])break;  
  25.         }  
  26.         int k = i - istart;    // 左子树有多少个元素  
  27.         createTree(p->left, preorder, pstart+1, pstart+k, inorder, istart, i-1, 0);   // 创建左子树 flag=0表示创建左子树  
  28.         pNode = p;                      
  29.         createTree(p->right, preorder, pstart+k+1, pend, inorder, i+1, iend, 1);     // 创建右子树 flag=1表示创建右子树  
  30.     }  
  31.       
  32.     TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {  
  33.         root = NULL;  
  34.         pNode = NULL;  
  35.         int n = preorder.size();  
  36.         if(n == 0) return root;  
  37.         createTree(root, preorder, 0, n-1, inorder, 0, n-1, 0);  
  38.         return root;  
  39.           
  40.     }  
  41. private:  
  42.     TreeNode *root, *pNode;  
  43. };  
阅读全文
0 0
原创粉丝点击