算法导论 第10章 10.4 有根树的表示
2016-06-13 00:00
337 查看
一、概念
1.二叉树
(1)用域p、left、right来存放指向二叉树T中的父亲、左儿子、右儿子。没有则为NULL。(2)结点结构
struct node { node *p; node *left; node *right; int key; };
(3)树的结构
struct Bin_Tree { node *head; };
2.分支数无限的有根树
(1)左孩子右兄弟表示法(2)结点结构
struct node { node *p; node *left_child; node *right_sibling; int key; };
(3)树的结构
struct Tree { node *head; };
二、练习
10.4-2算法导论 10.4-2 O(n)时间 递归遍历二叉树
TREE-PRINT(T) 1 print key[T] 2 if left[T] != NIL 3 TREE-PRINT(left[T]) 4 if right[T] != NIL 5 TREE-PRINT(right[T])
10.4-3
算法导论 10.4-3 O(n) 二叉树 非递归遍历
TREE-PRINT(T, S) 1 print key[T] 2 PUSH(S, T) 3 while true 4 if left[T] != NIL 5 then T <- left[T] 6 else 7 do 8 T = POP(S) 9 if T = NIL 10 then return 11 while left[T] = NIL 12 T <- right[T]
10.4-4
与二叉树的遍历过程相同
10.4-5
见算法导论-10.4-5
采用类似中序遍历的处理方法,对一个结点,可以分为以下几种情况
1.从父结点进入子结点进行处理
(1)如果有左孩子,就处理左孩子
(2)返回到自己
(3)访问自己
(4)如果有右孩子,就处理右孩子
(5)返回到自己的父结点
2.从左孩子返回,说明左孩子已经处理过,自己还没访问,自己的右孩子也没有处理过,就进行1-(2)
3.从右孩子返回,说明左右孩子都已经处理,自己也访问过,就返回到更上层
4.返回到根结点时,遍历结束
10.4-6
去掉parent指针,当布尔值为1时,rightchild指向父结点,当布尔值为0值,rightchild指向右兄弟,其余用法保持不变
相关文章推荐
- 算法导论 第13章 红黑树
- 算法导论 第7章 快速排序
- 算法导论 第12章 二叉查找树
- 算法导论-24.2-有向无回路图中的单源最短路径
- 算法导论 第10章 10.1 栈和队列
- 算法导论 11.1-4 大数组的直接寻址表
- 算法导论-14-1-最大重叠点
- 算法导论-12-2-基数树
- 算法导论-14-2-Josephus排列
- 算法导论-8-3-排序不同长度的数据项
- 算法导论 10.4-2 O(n)时间 递归遍历二叉树
- 算法导论-9.3-3-快速排序-最坏时间O(nlgn)
- 算法导论-24.1-Bellman-Ford算法
- 算法导论-15-1-双调欧几里得旅行商问题
- 算法导论-13-3-AVL树
- 算法导论 第22章 图算法 22.2 广度优先搜索
- Accepted丶 Personal Training (数据结构 && STL) 【未完待续】
- 数据结构与算法之八 队列
- 数据结构与算法之八 队列
- 数据结构与算法之八 队列