第23节 树的定义

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

树的定义

? 树是一种非线性的数据结构

?  树是由  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;
}

小结

在一些情况下 , 线性结构可看作特殊的树结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值