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;
    }

    运行结果:

  • 相关阅读:
    函数二 10
    函数初识 09
    文件操作 08
    数据类型的补充 day07
    小数据池 深浅copy 集合
    python Mysql 多条件查询
    ElasticSearch Python 基本操作
    用PyInstaller把Python代码打包成单个独立的exe可执行文件
    python 编译EXE文件
    Git 创建新分支检查分支
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4118050.html
Copyright © 2011-2022 走看看