zoukankan      html  css  js  c++  java
  • Construct Binary Tree from Preorder and Inorder Traversal

    已知前序遍历和中序遍历可以得到原二叉树。

    /**
     * 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> &preorder, vector<int> &inorder) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(preorder.size()==0)
            return NULL;
            return build(preorder,inorder,0,preorder.size(),0);
        }
        
        TreeNode *build(vector<int> &preorder, vector<int> &inorder,int p,int t,int i)
        {
            if(t==0)
            return NULL;
            TreeNode* head = (TreeNode *)malloc(sizeof(TreeNode));
            head->val = preorder[p];
            int j = -1;
            for( j = i;j<t+i;j++)
            {
                if(inorder[j] == preorder[p])
                break;
            }
            head->left = build(preorder,inorder,p+1,j-i,i);
            head->right = build(preorder,inorder,p+j-i,t-j-i,j+1);
            return head;
        }
    };
  • 相关阅读:
    【VectorDemo】
    【列表迭代器:添加元素】
    【列表迭代器】
    【迭代器】
    【LinkedList】
    【list 集合的使用】
    【CollectionDemo2】
    【CollectionDemo1】
    【集合和数组的区别?】
    【到底使用那种集合?】
  • 原文地址:https://www.cnblogs.com/727713-chuan/p/3318266.html
Copyright © 2011-2022 走看看