程序实现用先序序列创建一棵二叉树,并输出字符D位于二叉树的层数。代码如下所示:
#include"stdio.h"
typedef struct BiTNode{
char data; /*结点的数据域*/
struct BiTNode *lchild,*rchild; /*指向左孩子和右孩子*/
}BiTNode,*BiTree;
/*创建一棵二叉树*/
CreatBiTree(BiTree *T){
char c;
scanf("%c",&c);
if(c == ' ')
*T = NULL;
else{
*T = (BiTNode *)malloc(sizeof(BiTNode)); /*创建根节点*/
(*T)->data = c; /*向根结点中输入数据*/
CreatBiTree(&((*T)->lchild)); /*递归地创建左子树*/
CreatBiTree(&((*T)->rchild)); /*递归地创建右子树*/
}
}
/*访问二叉树结点,输出包含D字符结点位于二叉树中的层数*/
visit(char c,int level){
if(c == 'D')
printf("%c is at %d lever of BiTree\n",c,level);
}
/*遍历二叉树*/
PreOrderTraverse(BiTree T,int level){
if(T){
visit(T->data,level);
PreOrderTraverse(T->lchild,level+1);
PreOrderTraverse(T->rchild,level+1);
}
}
main(){
int level =1;
BiTree T = NULL; /*最开始T指向空*/
CreatBiTree(&T); /*创建二叉树*/
PreOrderTraverse(T,level); /*遍历二叉树,找到包含D字符结点位于二叉树中的层数*/
getche();
}
实现结果如下图所示:
实例与分析:
1.在创建二叉树的过程中有这么一行代码:*T = (BiTNode *)malloc(sizeof(BiTNode)),其中(BiTNode *)是否可以换成BiTree呢?答案是可以的,因为他俩可以看成是等效的。但是后面的sizeof(BiTNode)不可以换成sizeof(BiTree),因为BiTree是指针类型,而指针的sizeof都是一样大的。