二叉树问题急解决立即给分!!

redez 2004-12-18 09:19:30
我现在出现的问题是
用先序非递归方法遍历二叉树时输入的结果正好比正常的多了48不知道为什么
用栈作的
还有就是怎么在屏幕上缩格打印二叉树呢
#include "malloc.h"
#include "stdio.h"
#define ERROR 0
#define OVERFLOW -2
#define OK 1
typedef char TElemType;
typedef int Status;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
struct Stack
{
BiTree ds;
Stack *next;
};

Stack *Push(Stack *top, BiTree ds)
{
Stack *t = top;
top = (Stack *) malloc (sizeof(Stack));
top->ds=ds;
top->next = t;
return top;
}

Stack *Pop(Stack *top)
{
if (top){
Stack *t = top;
top = top->next;
free(t);
} else
;//Pop error message...
return top;
}

BiTNode *GetTop(Stack *top)
{
if (top)
return top->ds;
else
return NULL;
}

void PreorderNoDigui(BiTree T)
{
BiTree p;
Stack *top = NULL;
top = Push(top, T);
printf("%d ", top->ds->data);
p = T->lchild;
while (1){
for (; p; p = p->lchild){
printf("%d ", p->data);
top = Push(top, p);
}
do
if (top)
{
p = GetTop(top);
p = p->rchild;
top = Pop(top);
} else
return;
while (!p);
}
}

Status CreateBiTree(BiTree &T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
if(!(T=(BiTNode *) malloc (sizeof (BiTNode))))
return (OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}

void main()
{
BiTree T;
printf("请输入二叉树\n");
CreateBiTree(T);
printf("\n");
printf("\n非递归先序遍历为:\n");
PreorderNoDigui(T);
printf("\n");
getchar();

}
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flood1984 2004-12-19
  • 打赏
  • 举报
回复
多了48显然是和ASCII有关的错误了
redez 2004-12-19
  • 打赏
  • 举报
回复
谁有这方面c代码?
最好是递归的
02051223 2004-12-19
  • 打赏
  • 举报
回复



就这样!
xiaolizi 2004-12-18
  • 打赏
  • 举报
回复
打印的时候判断当前节点的深度值作为缩进的单位数量,可以作为参数传入,每递归调用一次孩子节点遍历该值加一。
redez 2004-12-18
  • 打赏
  • 举报
回复
:)
谢谢楼上的

还有一个问题

如何以缩格形式打印二叉树上各结点的信息。



oo 2004-12-18
  • 打赏
  • 举报
回复
printf("%d ", p->data);
==>
printf("%c ", p->data);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧