[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
[CODE]#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct btnode
{int d;
int lflag,rflag;
struct btnode *lchild,*rchild;
};
struct btnode *Create(struct btnode *t,int k)
{
struct btnode *bt,*q;
int d;
scanf("%d",&d);
if(d!=0)
{ q=(struct btnode *)malloc(sizeof(struct btnode ));
q->lchild=q->rchild=NULL,q->lflag=q->rflag=0;
q->d=d;
if(k==0) bt=q;
if(k==1) t->lchild=q;
if(k==2) t->rchild=q;
Create(q,1);
Create(q,2);
}
return (bt);
}
void Xiansuo(struct btnode *t,struct btnode **k)
{
if(t)
{
if ((*k)!=NULL&&(*k)->rchild==NULL)
{ (*k)->rchild=t ; (*k)->rflag=1;}
(*k)=t;
Xiansuo(t->lchild,k);
Xiansuo(t->rchild,k);
}
return;
}
struct btnode *Xiansuo (struct btnode *bt) /*非递归先序遍历 */
{
struct btnode *S[SIZE],*p;
int top=-1;
if(bt!=NULL)
{
top++;
S[top]=bt;
while (top>=0)
{
p=S[top];
top--;
if(k->rflag==1) k->rchild=p;
if(p->rchild==NULL) p->rflag=1,k=p;
if(p->rchild!=NULL) {top++;S[top]=p->rchild;}
if(p->lchild!=NULL) {top++;S[top]=p->lchild;}
}
p->rflag=-1;
}
return(bt);
}
void Print(struct btnode *t)
{
while(t->rflag!=-1)
{
printf("%d ",t->data);
if(t->rchild==NULL) t=t->lchild;
else t=t->rchild;
}
}
return ;
}
main()
{
struct btnode *bt=NULL;
bt=Create(bt,0) ;
bt = Xiansuo(bt,0) ;
Print(bt);
getch();
}[/CODE]
以前写的.先序.后序留给那小子
明天要交实验报告了,请各位高手帮助一下!谢谢!
二叉树的建立实验
下面给出二叉树的存储结构及二叉树的一些操作函数的原型,请完善有关的函数,并设计相应的二叉树实例,输入实例并验证程序是否正确。实验结束后请撰写实验报告。
#include <iostream.h>
typedef struct bitnode
{char data;
bitnode *lchild,*rchild;
}bitnode,*bitree;
bitree creatbitree1()
{//按先序序列输入结点,输入#表示空,建立二叉树的二叉链表。递归算法。
}
void creatbitree2(bitree &t)
{//按先序序列输入结点,输入#表示空,/建立二叉树的二叉链表。递归算法。
}
bitree creatbitree3()
{//按层次序列输入结点,输入#表示空,建立二叉树的二叉链表。非递归算法。
}
void creatbitree4(bitree &t)
{//按层次序列输入结点,输入#表示空,/建立二叉树的二叉链表。非递归算法。
}
void preorder(bitree t)
{ //先序遍历二叉树的递归算法。
}
void inorder(bitree t)
{//中序遍历二叉树的递归算法。
}
void postorder(bitree t)
{//后序遍历二叉树的递归算法。
}
void preorder2(bitree t)
{ //先序遍历二叉树的非递归算法。
}
void inorder2(bitree t)
{//中序遍历二叉树的非递归算法。
}
void postorder2(bitree t)
{//后序遍历二叉树的非递归算法。
}
void main()
{//验证上述函数是否正确的主函数。
}