天琪我的世界视频天堂1:二叉树编程问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 13:39:58
要求:
按先序输入一些字符,建立一个二叉树,然后按中序输出个结点的字符。再求出树的高度和叶子结点的个数,并在屏幕输出叶子结点。
如输入:abc##de#g#f###(#为空结点)
中序输出为cbegdfa。
急用,谢谢。

/*已经修改*/
/*输入样例:abd@ei@j@@f@@cg@h@@@@其中@表示空格*/
/*二叉树以先序输入的方法,其中必须补为完全二叉树:即叶子结点下面也要挂空指针。如输入abc@@@@。*/
#include<stdio.h>
#include<malloc.h>
typedef char datatype;
typedef struct _node{
datatype data;
struct _node *lchild,*rchild;
}BTnode;/*结点定义*/
typedef BTnode *BinTree;/*根指针定义*/
void CreateBinTree(BinTree *T)/*此函数使用地址传递。根指针T在函数中被指向二叉数的根结点*/
{
char ch;
if((ch=getchar())==' ') *T=NULL;
else {
*T=(BTnode *)malloc(sizeof(BTnode));/*T始终是二叉树的根结点(递归用的仅仅是左右结点*/
(*T)->data=ch;
CreateBinTree(&((*T)->lchild));/*注意 地址传递,若传递BTnode *型,如:T->lchild;则表示是传递其中的内容,没有意义(在前面用BTnode *p定义的话)*/
CreateBinTree(&((*T)->rchild));
}
}
void Inorder(BinTree T)/*中序*/
{
if(T!=NULL)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Preorder(BinTree T)/*前序*/
{
if(T!=NULL)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
void postorder(BinTree T)/*后序*/
{
if(T)
{
postorder(T->lchild);
postorder(T->rchild);
printf("%c",T->data);
}
}
int main()
{
BinTree root;/*根结点指针定义*/
CreateBinTree(&root);/*传入根结点指针的地址在函数中指向二叉树根*/
Preorder(root);
}