您的位置:首页 > 理论基础 > 数据结构算法

算法导论 第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指向右兄弟,其余用法保持不变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: