怎么画二叉树

yel_hb 2009-04-16 10:16:03
大家有什么办法能在控制台程序中画一棵任意二叉树吗?实在没想到什么好的办法~特此请教各位~^^
...全文
364 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgjxwl 2009-04-18
  • 打赏
  • 举报
回复
用setw()进行格式化输出
S_zxing 2009-04-18
  • 打赏
  • 举报
回复
强大,顶一下……
ryfdizuo 2009-04-17
  • 打赏
  • 举报
回复
主要是格式化一下输出就行了啊。
xing_cq 2009-04-17
  • 打赏
  • 举报
回复
怎么这么多的错误啊
jixingzhong 2009-04-16
  • 打赏
  • 举报
回复
其中包含了各类输出方式,根据你的要求,在输出的时候进行格式控制即可
jixingzhong 2009-04-16
  • 打赏
  • 举报
回复
二叉树实现源代码如下:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int status;

typedef struct BiNode
{
char Data;
struct BiNode* lChild;
struct BiNode* rChild;
}BiNode,*pBiNode;

status CreateTree(BiNode** pTree);
status PreOrderTraval(BiNode* pTree);
status Visit(char Data);
status Display(BiNode* pTree,int Level);
status Clear(BiNode* pTree);

BiNode *pRoot=NULL;

main()
{
clrscr();
CreateTree(&pRoot);

printf("\nPreOrder:");
PreOrderTraval(pRoot);
printf("\n");

printf("\nInOrder:");
InOrderTraval(pRoot);
printf("\n");

printf("\nPostOrder:");
PostOrderTraval(pRoot);
printf("\n");

printf("\nShowLeaves:");
ShowLeaves(pRoot);
printf("\n-----------------------\n");
printf("\n");

Display(pRoot,0);

printf("\n");
printf("\nDeleting Tree:\n");
DelTree(pRoot);
printf("BiTree Deleted.");

getch();
}
status CreateTree(BiNode** pTree) /*Input Example: abd##e##cf##g##*/
{
char ch;
scanf("%c",&ch);
if(ch==‘#‘)
{
(*pTree)=NULL;
}
else
{
if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode))))
{
exit(OVERFLOW);
}
(*pTree)->Data=ch;
CreateTree(&((*pTree)->lChild));
CreateTree(&((*pTree)->rChild));
}
return OK;
}
status PreOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(Visit(pTree->Data))
{
if(PreOrderTraval(pTree->lChild))
{
if(PreOrderTraval(pTree->rChild))
{
return OK;
}
}
}
return ERROR;
}
else
{
return OK;
}
}
status InOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(InOrderTraval(pTree->lChild))
{
if(Visit(pTree->Data))
{
if(InOrderTraval(pTree->rChild))
{
return OK;
}
}
return ERROR;
}
return ERROR;
}
else
{
return OK;
}
}
status PostOrderTraval(BiNode* pTree)
{
if(pTree)
{
if(PostOrderTraval(pTree->lChild))
{
if(PostOrderTraval(pTree->rChild))
{
if(Visit(pTree->Data))
{
return OK;
}
return ERROR;
}
}
return ERROR;
}
else
{
return OK;
}
}
status Visit(char Data)
{
printf("%c",Data);
return OK;
}
status Display(BiNode* pTree,int Level)
{
int i;
if(pTree==NULL) return;
Display(pTree->lChild,Level+1);
for(i=0;i<Level-1;i++)
{
printf(" ");
}
if(Level>=1)
{
printf("--");
}
printf("%c\n",pTree->Data);
Display(pTree->rChild,Level+1);
}
status ShowLeaves(BiNode* pTree)
{
if(pTree)
{
if(ShowLeaves(pTree->lChild))
{
if(ShowLeaves(pTree->rChild))
{
if((pTree->lChild==NULL)&&(pTree->rChild==NULL))
{
if(!Visit(pTree->Data))
{
return ERROR;
}
}
return OK;
}
}
return ERROR;
}
else
{
return OK;
}
}
status DelTree(BiNode* pTree)
{
if(pTree)
{
if(DelTree(pTree->lChild))
{
if(DelTree(pTree->rChild))
{
printf("Deleting %c\n",pTree->Data);
free((void*)pTree);
return OK;
}
}
return ERROR;
}
else
{
return OK;
}
}
  • 打赏
  • 举报
回复
画一颗..
打印空格,打印符号.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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