主题:求树的先根遍历的算法!
ligonghaozi
[专家分:10] 发布于 2007-11-02 13:34:00
求树的先根遍历的算法!请教大家!
回复列表 (共3个回复)
沙发
zdwzzu2006 [专家分:260] 发布于 2007-11-02 22:00:00
//二叉树的创建,遍历 ,递归方法
#include <stdio.h>
//节点结构体
typedef struct BiTNode {
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//***********先序建立二叉树中的节点 ******************
void CreatBiTree(BiTree *T) //指针的指针
{
char ch;
if((ch=getchar())==' ')
*T=NULL;
else
{
(*T)=(BiTNode *)malloc(sizeof(BiTNode));
if(!(*T))
exit(1);
(*T)->data=ch;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
//***************先序遍历二叉树**********************
void PreTravel(BiTree T)
{
if(T)
{
printf("%c ",T->data);
PreTravel(T->lchild);
PreTravel(T->rchild);
}
}
//*************中序遍历******************
void InOrderTravel(BiTree T)
{
if(T)
{
InOrderTravel(T->lchild);
printf("%c ",T->data);
InOrderTravel(T->rchild);
}
}
//*****************主函数******************
int main()
{
BiTree T;
printf("please input BiTree:\n");
CreatBiTree( &T);//指向指针的指针
printf("The PerTravel is \n");
PreTravel(T);
printf("\nThe InOrder Travel is\n");
InOrderTravel(T);
getch();
return 0;
}
我写的程序,希望对你有用。
[em1]别忘了加分啊
板凳
ligonghaozi [专家分:10] 发布于 2007-11-03 10:08:00
我要的是先序遍历‘非递规’算法啊!
3 楼
luning298 [专家分:130] 发布于 2007-11-07 22:41:00
void porder(BTree *bt)
{
BTree *stack[MaxSize],*p;
int top=-1;
if(bt!=NULL)
{
top++;
stack[top]=bt;
while(top>-1)
{
p=stack[top];
top--;
cout<<p->data<<" ";
if(p->right!=NULL)
{
top++;
stack[to]=p->right;
}
if(p->left!=NULL)
{
top++;
stack[top]=p->left;
}
}
}
}
使用一个栈stack,首先将跟结点入栈,开始循环:从栈中退出当前的p;先访问它,然后将其右结点入栈,再将其左结点入栈,如此直到栈空为止。
我来回复