说了半天,我们如何在内存中生成一棵二叉链表的二叉树呢?
树都没有,哪来遍历。所以我们还得来谈谈关于二叉树建立的问题。
binary tree 二叉树
英 [ˈbaɪnəri triː]
/* 二叉树的孩子表示法结构定义 */typedef struct BiNode{TElemType data;struct BiNode *lchild;struct BiNode *rchild;} BiNode, *BiTree;//typedef BiNode * BiTree;
/* 按前序输入二叉树中结点的值(一个字符) *//* #表示空树,构造二叉链表表示二叉树T。 */void CreateBiTree(BiTree *T)//T二级指针{TElemType ch;scanf("%c", &ch);if (ch == '#')*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));if (!*T)exit(OVERFLOW);/* 生成根结点 */(*T)->data = ch;/* 构造左子树 */CreateBiTree(&((*T)->lchild));/* 构造右子树 */CreateBiTree(&((*T)->rchild));}}
其实建立二叉树,也是利用了递归的原理。
只不过在原来应该是打印结点的地方,改成了生成结点、给结点赋值的操作而已。
所以大家理解了前面的遍历的话,对于这段代码就不难理解了。
