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

    Given inorder and postorder traversal of a tree, construct the binary tree.

    Note:
    You may assume that duplicates do not exist in the tree.

    C++实现代码:

    #include<iostream>
    #include<new>
    #include<vector>
    using namespace std;
    
    //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) {
            TreeNode *root=NULL;
            root=build(inorder.begin(),inorder.end(),postorder.begin(),postorder.end());
            return root;
        }
        TreeNode *build(vector<int>::iterator ibegin,vector<int>::iterator iend,vector<int>::iterator pbegin,vector<int>::iterator pend)
        {
            TreeNode *root=NULL;
            if(pbegin==pend||ibegin==iend)
                return NULL;
            auto it=ibegin;
            auto tmp=pend-1;
            while(it!=iend)
            {
                if(*it==*tmp)
                    break;
                it++;
            }
            root=new TreeNode(*it);
            int len=it-ibegin;
            root->left=build(ibegin,it,pbegin,pbegin+len);
            root->right=build(it+1,iend,pbegin+len,pend-1);
            return root;
        }
        void preorder(TreeNode *root)
        {
            if(root)
            {
                cout<<root->val<<" ";
                preorder(root->left);
                preorder(root->right);
            }
        }
        void inorder(TreeNode *root)
        {
            if(root)
            {
                inorder(root->left);
                cout<<root->val<<" ";
                inorder(root->right);
            }
        }
        void postorder(TreeNode *root)
        {
            if(root)
            {
                postorder(root->left);
                postorder(root->right);
                cout<<root->val<<" ";
            }
        }
    };
    
    int main()
    {
        vector<int> posorder={4,5,2,6,7,3,1};
        vector<int> inorder={4,2,5,1,6,3,7};
        Solution s;
        TreeNode *root=s.buildTree(inorder,posorder);
        s.preorder(root);
        cout<<endl;
        s.inorder(root);
        cout<<endl;
        s.postorder(root);
        cout<<endl;
    }

    运行结果:

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4118050.html
Copyright © 2011-2022 走看看