前序中序 与 中序后序 构造二叉树
作者:互联网
先序中序 与 中序后序 构造二叉树
先序中序构造二叉树
后序输出
#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