永发信息网

数据结构,关于用先序和中序建立二叉树的问题,求高手。。好的会追加分

答案:2  悬赏:0  手机版
解决时间 2021-02-12 01:23
import java.io.*;

class Node{
public Node(){};
public char c=' ';
public Node lchlid=null,rchlid=null;
public Node(char dat){
c=dat;
}
}

public class ex12_1 {

public static void createtree(Node root,Node a[],int m,int n,Node b[],int x,int y){
if(m>n){root=null;}
else{
root=a[m]; / 这里 !!!!!!!! /
int i;int j;
for(i=x,j=m;i<=y;i++,j++){
if(b[i]==root)
break;
}

createtree(root.lchlid,a,m+1,j,b,x,i-1); / 还有这里 !!!!/
createtree(root.rchlid,a,j+1,n,b,i+1,y);
}
}

public static void postorder(Node n){
if(n.lchlid!=null) postorder(n.lchlid);
else if(n.rchlid!=null) postorder(n.rchlid);
else System.out.print(n.c+" ");
}

public static void main(String args[])throws IOException{
System.out.println("输入节点数:");
int t;
BufferedReader in= new BufferedReader(new InputStreamReader(System.in));
int i=Integer.parseInt(in.readLine());
Node a[]=new Node[i];Node b[]=new Node[i];
System.out.println("输入先序遍历结果:");
for(t=0;ta[t]=new Node((char)System.in.read());
}
System.out.println("输入中序遍历结果:");
for(t=0;tb[t]=new Node((char)System.in.read());
}
Node root=new Node();
createtree(root,a,0,i-1,b,0,i-1);
postorder(root);
}
}

我最后用后序输出了,但是运行时说
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at ex12_1.createtree(ex12_1.java:18)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.createtree(ex12_1.java:25)
at ex12_1.main(ex12_1.java:51)

错误在上面标出来了,不懂哪里有问题啊,是算法的问题?那是我在c数据结构课上学的啊。。。。。
最佳答案
void createtree(node* &root, node *a, int m, int n, node *b, int x, int y)
{
if( m >= n ){
root = NULL;
return;
}

root = new node();
root->c = a[m].c;
root->lchild = NULL;
root->rchild = NULL;

int i = x, j = m;
for( ; i < y ; i ++, j++)
{
if( b[i].c == root->c)
break;
}

createtree(root->lchild, a, m+1, j+1, b, x, i);
createtree(root->rchild, a, j+1, n, b, i+1, y);
};

void postorder(node* &root)
{
if(root->lchild != NULL)
postorder(root->lchild);
if( root->rchild != NULL)
postorder(root->rchild);

cout << root->c;
};
全部回答
#define len sizeof(struct tree) #define null 0 #include #include struct tree { char data; struct tree *lchild,*rchild; }; //创建二叉树 struct tree *creat() { char c; struct tree *t; c=getchar(); if(c==' ') t=null; else { t=(struct tree*)malloc(len); t->data=c; t->lchild=creat(); t->rchild=creat(); } return t; } //前序遍历 void preprint(struct tree*t) { if(t!=null) { printf("%c->",t->data); preprint(t->lchild); preprint(t->rchild); } } //中序遍历 void inprint(struct tree*t) { if(t!=null) { inprint(t->lchild); printf("%c->",t->data); inprint(t->rchild); } } //后序遍历 void postprint(struct tree*t) { if(t!=null) { postprint(t->lchild); postprint(t->rchild); printf("%c->",t->data); } } main() { struct tree *t; printf("please input tree in order:\n"); t=creat(); printf("the result of preorder traversal is\n"); preprint(t); printf("^\nthe result of inorder traversal is\n"); inprint(t); printf("^\nthe result of postorder traversal is\n"); postprint(t); printf("^\n"); getch(); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
福建省晋江的泰康保险公司在哪里。
骨折肌肉萎缩如何锻炼
公司不主动支付竟业保偿金,保密协议是否有效?
鸟儿记忆力好吗?
湖南省冶金材料研究所地址在哪,我要去那里办
秦岭-淮河一线与下列那些分界线大体一致B①80
感情靠的是什么
江苏邳州人 毕业报道证开到市里面 也就是邳州
来日本时候最多可以带多少烟? 有经验的朋友
挖路河地址在什么地方,想过去办事
50岁左右的妈妈,血液太浓,经常晕厥,该怎么
下列各组数分别为一个三角形三边的长,其中能
这张五元的有收藏价值吗?
我今年23岁了,女,但我爸仍说我心智不成熟,
MacBook Air 安装win10以后F1到F10功能键不能
推荐资讯
贵州省仁怀市茅台镇古法酿酒厂的46度古法牌国
秦朝确立的郡县制的特点是()
肯德基金时代餐厅我想知道这个在什么地方
五金水暖电料批发在哪里啊,我有事要去这个地
菜做甜了怎么去甜味
滴滴快车抢单怎么才能最快
G1211/G202(路口)怎么去啊,有知道地址的么
谁能给我出几道方程的题?
电喷汽车打着以后没怠速加不上油门是怎么回事
把手机摄像头换成800万像素的大约要多少钱?
佛山市麦尔电器有限公司这个地址在什么地方,
铁板是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?