代码:
含注释,供参考
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
struct Node*Lchild;//左孩子
struct Node*Rchild;//右孩子
char ch;//存储的字符
} BiTNode,*BiTree;
void CreateBiTree(BiTree T);//先序创建二叉树
void Preorder(BiTree T);//先序遍历访问BT二叉树
int main()
{
BiTNode BT;
CreateBiTree(&BT);//创建BT二叉树
Preorder(&BT);//先序遍历访问BT二叉树
return 0;
}
/*先序创建二叉树
*T: 目标二叉树头指针
*/
void CreateBiTree(BiTree T)
{
char c;
c=getchar();
if(c=='#')//"#"表示子树为空
{
T->ch='#';
T->Lchild=NULL;
T->Rchild=NULL;
}
else
{
T->Lchild=(BiTree)malloc(sizeof(BiTNode));
T->Rchild=(BiTree)malloc(sizeof(BiTNode));
T->ch=c;
c=getchar();
if(c=='(')//创建T的左孩子
CreateBiTree(T->Lchild);
if(c!=')')
{
c=getchar();
if(c==',')//创建T的右孩子
CreateBiTree(T->Rchild);
}
else {
T->Lchild=NULL;//遇到‘ ) ’,这一层结束,下一层置为NULL
T->Rchild=NULL;
}
}
}
/*先序遍历访问BT二叉树
*T: 目标二叉树头指针
*/
void Preorder(BiTree T)
{
if(T!=NULL)
{
printf("%c",T->ch);//输出根节点
Preorder(T->Lchild);//先序遍历左子树
Preorder(T->Rchild);//先序遍历右子树
}
}