/************************************************************************/
/* coder:huifeng00
/* 时间:2010-5-16 下午5点
/* 功能:实现空格为虚节点的二叉树的建立,并且格式化打印二叉树
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *left,*right;
}Node,*PNode;
PNode createBtree(PNode root)//创建二叉树,控制台下输入,基于先序遍历输入
{
char data;
scanf("%c",&data);
if (data==' ')
{
root=NULL;
return root;
}
root = (PNode)malloc(sizeof(Node));
root->data = data;
root->left = createBtree(root->left);
root->right = createBtree(root->right);
return root;
}
void printFormat(PNode root)//格式化打印二叉树
{
static i = 0;//这是控制格式化。
int j;
if (root==NULL)
{
return;
}
for (j=0;j<i;j++)
{
printf(" ");
}
printf("%c\n",root->data);
i++;
printFormat(root->left);
printFormat(root->right);
i--;
}
int main()
{
PNode root=NULL;
root = createBtree(root);
printFormat(root);
return 0;
}
程序如上。
虚节点用空格输入的。例如你输入
先序遍历
234空格空格5空格6空格空格7空格空格回车就可以看到结果。
另外你说的输出二叉树图形。
我是这样输出的。第1列是最高节点,就是根。
第2列是第2层节点。
格式话是通过缩进完成的。
这个图形可以参考下面的地址。
http://hi.baidu.com/huifeng00/blog/item/c1e37a4d59310b3caec3ab32.html我空间曾经写过大量的关于二叉树和多叉树的程序,可以参考下,在数据结构类别下。
这个程序是可以运行的,运行工具是vc6.0.
语言是C.
如还有疑问,可以空间留言,或hi我。