输入
在一行上输入若干个字符以建立一棵二叉树,遇‘#’表示建立一个空二叉树。
输出
二叉树的先序遍历序列
样例输入 Copy
ABD#CE#
样例输出 Copy
ABDCE
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
void InitBiTree(BiTree &T);
void CreateBiTree(BiTree &T);
void PreOrderTraverse(BiTree T);
int main(void) {
BiTree T;
InitBiTree(T);
CreateBiTree(T);
PreOrderTraverse (T);
return 0;
}
/* 构造空二叉树T */
void InitBiTree(BiTree &T) {
T=(BiTree)malloc(sizeof(BiTNode));
T->lchild=NULL;
T->rchild=NULL;
}
/* 按先序输入二叉树中结点的值(一个字符) */
/* #表示空树,构造二叉链表表示二叉树T。 */
void CreateBiTree(BiTree &T) {
char ch;
ch=getchar();
if (ch == '*')
T= NULL;
else
{
T->lchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild=(BiTree)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
/*先序递归遍历T */
void PreOrderTraverse(BiTree T) {
if (T!=NULL)
{
putchar(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
恕我比较菜,真的第一次见有人用&T
来作为参数的,不应该是指针吗?
你这个typdef的方法也太不常见了😂
void InitBiTree(BiTree* T);
void CreateBiTree(BiTree* T);
int main() {
BiTree T;
InitBiTree(&T);
CreateBiTree(&T);
return 0;
}
代码没什么问题啊,遇‘#’表示建立一个空二叉树, 代码里第35行是 if (ch == '*') T= NULL; 与题目要求不符,应修改为: if (ch == '#') T= NULL; 。 按代码,输入应是:ABD#CE##### 。