zoukankan      html  css  js  c++  java
  • LeetCode_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 binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
      TreeNode * constructSubtree(vector<int> &preOrder, int preStart, int preEnd, vector<int> &inOrder, int inStart, int inEnd){
          
        // if(preStart < preEnd) return NULL ;
           
         int temp = preOrder[preStart] ;
         TreeNode *root = new TreeNode(temp) ;
         if(preStart == preEnd)
            return root ;
            
         int i;
         for(i = inStart ; i<= inEnd ;i++)
           if(inOrder[i] == temp ) break;
          
         root->left = preStart+1 <= preStart+i-inStart ? constructSubtree(preOrder, preStart+1, preStart+i-inStart, inOrder, inStart, i-1) : NULL;
         root->right = preStart+i-inStart+1 <=  preEnd ? constructSubtree(preOrder, preStart+i-inStart+1,  preEnd, inOrder, i+1, inEnd) : NULL;
         
         return root ;
     } 
        TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
        
            if(preorder.size() == 0 ) return NULL;
            TreeNode *root = new TreeNode(preorder[0]) ;
            if(preorder.size() == 1 ) return root ;
            
            int i;
            int temp = preorder[0] ;
            
            for(i = 0; i< inorder.size(); i++)
               if(inorder[i] == temp) break ;
            
             root->left = 1 <= i ? constructSubtree(preorder, 1,i,inorder, 0, i-1) : NULL  ;
        
             root->right = i+1 <= preorder.size()-1 ? constructSubtree(preorder, i+1,preorder.size()-1, inorder, i+1, inorder.size() -1): NULL ;
            
            return root;
       }
       
    };
    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    6.1.1.1 属性类型之数据属性
    6.1 理解对象
    5.7.2.4 random() 方法
    5.7.2.3 舍入方法
    5.7.2.2 min()和max()方法
    5.7.2.1 Math对象
    5.7.1.4 window对象
    frontend2_s9_part2_fe_d48_form
    s10_part3_django_basic.md
    frontend1_s9_part2_d47_html
  • 原文地址:https://www.cnblogs.com/graph/p/3020139.html
Copyright © 2011-2022 走看看