1.普通树双亲孩子表示法

  1. #define MAX_TREE_SIZE 100
  2. typedef char ElemType;
  3. // 孩子结点
  4. typedef struct CTNode
  5. {
  6. int child; // 孩子结点的下标
  7. struct CTNode *next; // 指向下一个孩子结点的指针
  8. } *ChildPtr;
  9. // 表头结构
  10. typedef struct
  11. {
  12. ElemType data; // 存放在树中的结点的数据
  13. int parent; // 存放双亲的下标
  14. ChildPtr firstchild; // 指向第一个孩子的指针
  15. } CTBox;
  16. // 树结构
  17. typedef struct
  18. {
  19. CTBox nodes[MAX_TREE_SIZE]; // 结点数组
  20. int r, n;
  21. }

image.png

2.二叉树的建立和遍历算法

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char ElemType;
  4. typedef struct BiTNode
  5. {
  6. char data;
  7. struct BiTNode *lchild, *rchild;
  8. } BiTNode, *BiTree;
  9. // 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据
  10. CreateBiTree(BiTree *T)
  11. {
  12. char c;
  13. scanf("%c", &c);
  14. if( ' ' == c )
  15. {
  16. *T = NULL;
  17. }
  18. else
  19. {
  20. *T = (BiTNode *)malloc(sizeof(BiTNode));
  21. (*T)->data = c;
  22. CreateBiTree(&(*T)->lchild);
  23. CreateBiTree(&(*T)->rchild);
  24. }
  25. }
  26. // 访问二叉树结点的具体操作,你想干嘛?!
  27. visit(char c, int level)
  28. {
  29. printf("%c 位于第 %d 层\n", c, level);
  30. }
  31. // 前序遍历二叉树
  32. PreOrderTraverse(BiTree T, int level)
  33. {
  34. if( T )
  35. {
  36. visit(T->data, level);
  37. PreOrderTraverse(T->lchild, level+1);
  38. PreOrderTraverse(T->rchild, level+1);
  39. }
  40. }
  41. int main()
  42. {
  43. int level = 1;
  44. BiTree T = NULL;
  45. CreateBiTree(&T);
  46. PreOrderTraverse(T, level);
  47. return 0;
  48. }