数据结构第6章树南京工程学院通信工程学院.pptVIP

  • 2
  • 0
  • 约 94页
  • 2017-06-05 发布于四川
  • 举报

数据结构第6章树南京工程学院通信工程学院.ppt

A B C D E F G data parent A B C D E F G -1 0 0 0 1 1 3 0 1 2 3 4 5 6 * 便于涉及双亲的操作; * 求结点的孩子时需要遍历整棵树。 特点: 用双亲表示实现的树定义 #define MaxSize //最大结点个数 typedef char TreeData; //结点数据 typedef struct { //树结点定义 TreeData data; int parent; //双亲位置域 } TreeNode; typedef TreeNode Tree[MaxSize]; //树 2、孩子表示法 孩子表示法:通过保存每个结点的孩子结点的位置,表示树中结点之间的结构关系。 方法一: 顺序 存储 #define MAX_TREE_SIZE 100 typedef struct PTNode { TElemType data; int child1; //第1个孩子位置域 int child2; //第2个孩子位置域 ...... int childd; //第d个孩子位置域 }PTNode; typedef struct{ PTNode nodes[MAX_TREE_SIZE]; int n; //结点数 }PTree; 孩子表示法举例 R A D E F C B G K H 0 1 2 3 4 5 6 7 8 9 数组下标: * 便于涉及孩子的操作;求双亲不方便; * 采用同构的结点,空间浪费。 R 1 A 4 B 0 C 6 D 0 E 0 F 7 G 0 H 0 K 0 2 3 5 0 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 方法二:链式存储:对树的每个结点用线性链表存贮它的孩子结点 树的孩子链表类型定义 typedef struct CTNode{ //孩子结点 int child; struct CTNode * next; }* ChildPtr; typedef struct{ TElemType data; ChildPtr firstchild; //孩子链表头指针 }CTBox; typedef struct{ CTBox nodes[MAX_TREE_SIZE]; Int n, r; //结点数和根的位置; }CTree; 孩子链表存储表示举例 R A D E F C B G K H 0 1 2 3 4 5 6 7 8 9 数组下标: * 便于涉及孩子的操作; * 求结点的双亲时不方便。 R A B / C D / E / F G / H / K / 1 2 3 / 4 5 / 6 / 7 8 9 / T.nodes[ ]; T.n=10; T.r = 0; 结点结构 data firstChild nextSibling 3 孩子兄弟表示法(二叉链表示法) 孩子兄弟表示法用二叉链表作为树的存贮结构 typedef struct CSNode { ELemType data; struct CSNode *firstchild,*nextsibling; }CSNode, *CSTree; 类型定义: R A D E F C B G K H R ? A ? D E ? ? C ? H ? F ? G ? B ? K ? ? 孩子兄弟表示法示例: 树与二叉树的转换

文档评论(0)

1亿VIP精品文档

相关文档