二叉树编程问题
发布网友
发布时间:2022-04-14 21:32
我来回答
共1个回答
热心网友
时间:2022-04-14 23:02
/*已经修改*/
/*输入样例: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);
}