说了半天,我们如何在内存中生成一棵二叉链表的二叉树呢?
树都没有,哪来遍历。所以我们还得来谈谈关于二叉树建立的问题。

binary tree 二叉树

[ˈbaɪnəri triː]

  1. /* 二叉树的孩子表示法结构定义 */
  2. typedef struct BiNode
  3. {
  4. TElemType data;
  5. struct BiNode *lchild;
  6. struct BiNode *rchild;
  7. } BiNode, *BiTree;
  8. //typedef BiNode * BiTree;
  1. /* 按前序输入二叉树中结点的值(一个字符) */
  2. /* #表示空树,构造二叉链表表示二叉树T。 */
  3. void CreateBiTree(BiTree *T)//T二级指针
  4. {
  5. TElemType ch;
  6. scanf("%c", &ch);
  7. if (ch == '#')
  8. *T = NULL;
  9. else
  10. {
  11. *T = (BiTree)malloc(sizeof(BiTNode));
  12. if (!*T)
  13. exit(OVERFLOW);
  14. /* 生成根结点 */
  15. (*T)->data = ch;
  16. /* 构造左子树 */
  17. CreateBiTree(&((*T)->lchild));
  18. /* 构造右子树 */
  19. CreateBiTree(&((*T)->rchild));
  20. }
  21. }

其实建立二叉树,也是利用了递归的原理。
只不过在原来应该是打印结点的地方,改成了生成结点、给结点赋值的操作而已。
所以大家理解了前面的遍历的话,对于这段代码就不难理解了。