其他分享
首页 > 其他分享> > 前序中序 与 中序后序 构造二叉树

前序中序 与 中序后序 构造二叉树

作者:互联网

先序中序 与 中序后序 构造二叉树

先序中序构造二叉树
后序输出

#include<bits/stdc++.h>
using namespace std;
const int l = 5;
struct node
{
    int val;
    node* left;
    node* right;
};
node* creat(int a[], int b[], int i, int j, int m, int n)
{
    if(i>j) return NULL;
    node *p = new node;
    int k = m;
    while(k<=n && a[i]!=b[k]) ++k;
    if(k>n) exit(0);
    p->val = a[i];
    p->left=creat(a,b,i+1,i+k-m,m,k-1);
    p->right=creat(a,b,i+k-m+1,j,k+1,n);
    return p;
}
void show(node *root)
{
    if(!root) return;
    show(root->left);
    show(root->right);
    cout << root->val << " ";
    return;
}
int main()
{
    int a[l]={3,9,20,15,7}, b[l]={9,3,15,20,7};
    node *root=creat(a,b,0,l-1,0,l-1);
    show(root);
    return 0;
}

中序后序构造二叉树
先序输出

#include<bits/stdc++.h>
using namespace std;
const int l = 5;
struct node
{
    int val;
    node* left;
    node* right;
};
node* creat(int a[], int b[], int i, int j, int m, int n)
{
    if(i>j) return NULL;
    node *p = new node;
    int k = m;
    while(k<=n && a[j]!=b[k]) ++k;
    if(k>n) exit(0);
    p->val = a[j];
    p->left=creat(a,b,i,i+k-m-1,m,k-1);
    p->right=creat(a,b,i+k-m,j-1,k+1,n);
    return p;
}
void show(node *root)
{
    if(!root) return;
    cout << root->val << " ";
    show(root->left);
    show(root->right);
    return;
}
int main()
{
    int a[l]={9,15,7,20,3}, b[l]={9,3,15,20,7};
    node *root=creat(a,b,0,l-1,0,l-1);
    show(root);
    return 0;
}

标签:node,return,creat,show,int,中序,二叉树,root,前序
来源: https://blog.csdn.net/LittleBlacky/article/details/121321141