数据结构6-关于“树”的生成与操作的实例

来源:互联网 发布:马塔潘角海战知乎 编辑:程序博客网 时间:2024/05/16 07:56

程序实现用先序序列创建一棵二叉树,并输出字符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都是一样大的。

0 0