云峰xxz 发表于 2012-3-3 23:45:29

菜鸟求大神解决二叉树遍历问题

本帖最后由 番茄 于 2014-3-20 00:54 编辑

/************************本遍历操作实现为中序遍历*************************/


#include<stdio.h>
#include<malloc.h>


struct bitnode //定义二叉树
{
char data;
struct bitnode *lchild,*rchild;

};

void preordertraverse(struct bitnode *t);
struct bitnode *create(struct bitnode *root);
void visit(struct bitnode *e);
struct bitnode *root;


int main()
{
struct bitnode *pt;
pt=create(root);
preordertraverse(pt);


return 0;

}


/**************************创建二叉树***************************************/

struct bitnode *create(struct bitnode *root)
{
struct bitnode *p; //定义节点变量
int n;
root=NULL; //根节点初始化



p=(struct bitnode *)malloc(sizeof(bitnode)); //输入根节点信息
if(!(p=(struct bitnode *)malloc(sizeof(bitnode))))
goto end;
else
{
printf("请输入节点信息 : \n");
scanf("%d",p->data);
root=p;

printf("请输入执行命令 : \n 1:继续 ! 2:结束!"); //控制是否结束构建
scanf("%d",&n);
if(n==2) goto end;
else
{
create(p->lchild); //递归调用create函数实现左边,右边的子树的遍历
create(p->rchild);
}


}

end:
return root;


}



/************************定义visit函数***********************/

void visit(struct bitnode *e)
{
printf("地址 : %o,data : %d, left pointer : %o, right pointer : %o\n",e,e->data,e->lchild,e->rchild);

}

/************************定义中序遍历函数**********************************/
void preordertraverse(struct bitnode *t)
{
if(t)
{
visit(t);
preordertraverse(t->lchild);
preordertraverse(t->rchild);

}


}

ccqiji 发表于 2012-3-14 13:14:56

递归算法最简单的
换下输出位置即可
非递归的
左孩子是个循环
前中都很简单
后有点难 自身要压两次栈
看看一些数据结构书吧

云峰xxz 发表于 2012-4-26 12:31:27

ccqiji 发表于 2012-3-14 13:14 static/image/common/back.gif
递归算法最简单的
换下输出位置即可
非递归的


恩,好的,多谢多谢。最近有点忙,没来得及回复!

驻留的习惯 发表于 2014-3-15 19:44:04

{:2_34:}!!!!!!!!!!!!

じO-联合 发表于 2014-3-16 10:32:45

看看,大神
页: [1]
查看完整版本: 菜鸟求大神解决二叉树遍历问题