zoukankan      html  css  js  c++  java
  • 已知先序遍历和中序遍历求后序遍历

    已知先序遍历和中序遍历求后序遍历

    样例输入
    8
    1 2 4 5 7 3 6 8
    4 2 7 5 1 8 6 3
    样例输出
    4 7 5 2 8 6 3 1
    

    思路:通过先序遍历和中序遍历可以构造而二叉树,先序遍历的头节点是根节点,再在中序遍历中找到根节点,根节点左边是左子树,右边是右子树,依次循环,直到输入的元素插入完。至此就构成了二叉树。

    代码

    //
    // Created by fundebug on 2021/4/16.
    //
    #include <iostream>
    #include <vector>
    #include <queue>
    #include <stdio.h>
    using namespace std;
    int *a;
    int *b;
    int n;
    struct node{
        int data;
        node *left,*right;
    };
    void postTree(node *root){
        if(root==NULL) return;
        postTree(root->left);
        postTree(root->right);
        cout<<root->data<<" ";
    }
    int search(int data,int* b,int n){
        for(int i=0;i<n;i++){
            if(b[i]==data)
                return i;
        }
        return -1;
    }
    node* buildTree(int* a,int *b, int n){
        if(n<=0) return NULL;
        node * root=NULL;
        root=new node;
        int index=search(a[0],b,n);
        root->data=a[0];
        root->left=buildTree(a+1,b,index);
        root->right=buildTree(a+index+1,b+index+1,n-index-1);
        return root;
    }
    int main(){
        cin>>n;
        a=new int[n];
        b=new int[n];
        for(int i=0;i<n;i++)
            cin>>a[i];
        for(int i=0;i<n;i++)
            cin>>b[i];
        node *root;
        root=buildTree(a,b,n);
        postTree(root);
    }
    
  • 相关阅读:
    yjh_study_command
    installed_oracle_can't_use
    Database 2 Day DBA guide_Chapter3
    oracle_great_integration_译文
    oracle_set_autocommit
    Database 2 Day DBA guide_Chapter2
    linux_base_commond_two
    linux_base_commond_one
    Oracle_11gR2_概念_第06章_数据字典和动态性能视图_英文词汇
    angular 自定义select选项,tab切换!!!
  • 原文地址:https://www.cnblogs.com/mak370/p/14668627.html
Copyright © 2011-2022 走看看