数据结构二叉树的遍历(二)
1、二叉树用二叉链表存储,编写算法采用先序遍历查找值为x的结点,找到返回其指针,否则返回NULL。
<span style="font-size:18px;">status serch_x(BinTree t,TreeType x){
if(!t)
return NULL; //查找失败
if(t->data==x){
return t;// 查找成功
else{
p=serche_x(p->lchild,x); //查找左子树
if(p)
return p;
else
return serch_x(p->rchild,x) </span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">//查找右子树</span><span style="font-size:18px;">
}
}
}</span>
2、二叉树用二叉链表存储,编写算法要求返回二叉树的后序序列中的第一个结点的指针。
<span style="font-size:18px;"><span style="font-size:18px;">status serch_x(BinTree t){
p=t;
if(p){
while(p->lchile||p->rchild){ //有孩子
while(p->lchild) //找到p的左子树中的最左下方的结点
p=p->lchild;
if(p->rchild)
p=p->rchild;
}
}
}</span></span>
3、已知一棵二叉树的先序序列和中序序列分别存储于两个一维数组pre和ino中,编写算法建立该二叉树的二叉链表。
<span style="font-size:18px;">status create(char *pre,char *ino,int n){
if(n<0)
return NULL;
p=(BinTree)malloc(sizeof(BiTNode));
p->data=*pre; //根结点
for(q=ino;q<ino+p,++q){ //在中序序列中确定根的位置
if(*ino==*pre)
break;
}
k=q->ino; //左子树的结点数
p->lchild=create(pre+1,ino,k);
p->rchild=create(pre+1+k,ino+1,n-1-k);
return p;
}</span>