posts - 16, comments - 0, trackbacks - 0, articles - 0

树和二叉树

Posted on 2008-08-29 12:59 dengbo 阅读(537) 评论(0)  编辑 收藏 引用 所属分类: 数据结构 严蔚敏
 6.1 的类型定义

基本术语

结点:数据元素 + 若干指向子树的分支

结点的:分支的个数

树的度:树中所有结点的度的最大值

叶子结点:度为零的结点

分支结点:度大于零的结点

从根到结点的路径

孩子结点双亲结点、兄弟结点、祖先子孙

结点的层次:假设根结点的层次为1,

l层的结点的子树根结点的层次为l+1

树的深度:树中叶子结点所在的最大层次

森林:是mm0)棵互不相交的树的集合

任何一棵非空树是一个二元组

Tree = rootF

其中:root被称为根结点,F被称为子树森林

 

6.2 二叉树的类型定义

   二叉树 或为空树;或是由一个根结点加上两棵分别称为左子树右子树的、互不相交的二叉树组成。

  

二叉树的重要特性:

性质 1

在二叉树的第 i 层上至多有2i-1个结点(i1)

性质 2

深度为k的二叉树上至多含2k-1个结点(k1

性质 3

对任何一棵二叉树,若他含有n0个叶子结点、n2个度为2的结点,则必存在关系式:n0 = n2+1

 

两类特殊的二叉树:

满二叉树:指的是深度为k且含有2k-1个结点的二叉树

完全二叉树:树中所含的n个结点和满二叉树中编号为1

n的结点一一对应

 

性质 4

具有n个结点的完全二叉树的深度wpe8.jpg (1741 bytes)

性质 5

若对含n个结点的二叉树从上到下且从左至右进行1n的编号,则对二叉树中任意一个编号为i的结点:

(1) i=1,则该结点是二叉树的根,无双亲,

否则,编号为wpeA.jpg (1097 bytes) 的结点为其双亲结点;

(2) 2i>n,则该结点无左孩子,

否则,编号为2i的结点为其左孩子结点

(3) 2i+1>n,则该结点无右孩子结点,

否则,编号为2i+1的结点为其右孩子结点

 

6.3 二叉树的存储结构

一、 二叉树的顺序存储表示

#define MAX_TREE_SIZE 100 // 二叉树的最大结点数

typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0号单元存储根结点

SqBiTree bt;

显然,这种顺序存储结构仅适用于完全二叉树。因为,在最坏的情况下,一个深度为 k 且只有 k 个结点的单支树(树中不存在度为 2 的结点)却需要长度为2k-1的一维数组。

 

二、二叉树的链式存储表示

1. 二叉链表

typedef struct BiTNode {

TElemType data;

struct BiTNode *lchild, *rchild; // 左右孩子指针

}
 BiTNode, *BiTree;

2三叉链表

typedef struct TriTNode {

TElemType data;

struct TriTNode *lchild, *rchild; // 左右孩子指针

struct TriTNode *parent; // 

}
 TriTNode, *TriTree;

3.双亲链表

typedef struct BPTNode {

TElemType data;

int *parent; // 指向双亲的指针

char LRTag; // 左、右孩子标志域

}
 BPTNode

typedef 
struct {

BPTNode nodes[MAX_TREE_SIZE];

int num_node; // 结点数目

}
 BPTree


 



 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理