-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
树的定义
? 树是一种非线性的数据结构
? 树是由 n ( n≥ 0 ) 个结点组成的有限集合
如果 n = 0 , 称为空树 ;
如果 n > 0 , 则 :
• 有一个特定的称之为 根 (root) 的结点 , 它只有直接后继 ,但没有直接前驱
• 为 除根以外的其它结点划分为 m (m≥ 0) 个 互不相交的有限集合T0, T1, … Tm- 1 每个集合又是一棵树 ,并且称之为根的子树( subTree)
第二:
树家族中的概念
?树的结点包含一个数据及若干指向子树的分支
? 结点拥有的子树数称为结点的度
度为0 的结点称为叶结点
度不为0 的结点称为分支结点
? 树的度定义为所有结点中的度的最大值
第三
? 结点的直接后继称为该结点的孩子
相应的 , 该结点称为孩子的双亲
? 结点的孩子的孩子的…… 称为该结点的子孙
相应的 , 该结点称为子孙的祖先
? 同一个双亲的孩子之间互称兄弟
第四
? 结点的层次
? 根为第1 层
? 根的孩子为第2 层
? ……
? 树中结点的最大层次称为树的深度或高度
第五:
如果树中结点的各子树从左向右是有次序的 , 子树间不能互换位置 , 则称该树为有序树 , 否则为无序树 。
第六:
森林是由 n ( n≥0 ) 棵互不相交的树组成的集合
第七:
树的操作
? 树的一些常用操作
? 创建树
? 销毁树
? 清空树
? 插入结点
? 删除结点
? 获取结点
? 获取根结点
? 获取树的结点数
? 获取树的高度
? 获取树的度
第八:
树操作的实现
? 树在程序中表现为一种特殊的数据类型
? 树的操作在程序中的表现为一组函数
Tree* Tree_Create();
void Tree_Destroy(Tree* tree);
void Tree_Clear(Tree* tree);
int Tree_Insert(Tree* tree, TreeNode* node, int pos);
TreeNode* Tree_Delete(Tree* tree, int pos);
TreeNode* Tree_Get(Tree* tree, int pos);
TreeNode* Tree_Root(Tree* tree);
int Tree_Height(Tree* tree);
int Tree_Count(Tree* tree);
int Tree_Degree(Tree* tree);
用C 语言描述树结构
#ifndef _TREE_H_
#define _TREE_H_
typedef void Tree;
typedef void TreeNode;
/* 创建树 */
Tree* Tree_Create();
/* 销毁已存在的树 */
void Tree_Destroy(Tree* tree);
/* 将已存在的树清空为空树 */
void Tree_Clear(Tree* tree);
/* 将结点node插入到tree中的pos位置处 */
int Tree_Insert(Tree* tree, TreeNode* node, int pos);
/* 将tree中pos位置的结点删除并返回 */
TreeNode* Tree_Delete(Tree* tree, int pos);
/* 将tree中pos位置的结点返回 */
TreeNode* Tree_Get(Tree* tree, int pos);
/* 返回tree的根结点 */
TreeNode* Tree_Root(Tree* tree);
/* 返回tree的高度 */
int Tree_Height(Tree* tree);
/* 返回树的结点数 */
int Tree_Count(Tree* tree);
/* 返回树的度数 */
int Tree_Degree(Tree* tree);
#endif
#include <stdio.h>
#include "Tree.h"
Tree* Tree_Create()
{
return NULL;
}
void Tree_Destroy(Tree* tree)
{
}
void Tree_Clear(Tree* tree)
{
}
int Tree_Insert(Tree* tree, TreeNode* node, int pos)
{
return 0;
}
TreeNode* Tree_Delete(Tree* tree, int pos)
{
return NULL;
}
TreeNode* Tree_Get(Tree* tree, int pos)
{
return NULL;
}
TreeNode* Tree_Root(Tree* tree)
{
return NULL;
}
int Tree_Height(Tree* tree)
{
return 0;
}
int Tree_Count(Tree* tree)
{
return 0;
}
int Tree_Degree(Tree* tree)
{
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "Tree.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
Tree* tree = Tree_Create();
Tree_Destroy(tree);
return 0;
}
小结
在一些情况下 , 线性结构可看作特殊的树结构