0
点赞
收藏
分享

微信扫一扫

数据结构5-树与图

mm_tang 2022-03-25 阅读 87

数据结构5-树与图

树形结构是一类重要的非线性数据结构 树是以分支关系定义的层级结构;数结构在客观世界中广泛存在(如人类社会族谱,社会组织机构关系等),同时在计算机领域以及数据库系统,树形结构也是重要的组织形式;

1.树的定义
		由n个结点组成的有限集,n=0空树
							   n>0 有且仅有一个称做根的结点
							   n>1 互不相交的
							   
2.树中基本的概念
	结点的度:  结点的子树个数  度为0的结点 ---> 终端结点  叶子结点
	树的度: 树中所有有结点  度的 最大值
	树的层次:从根开始,根为第一层
	树的深度(高度):树种结点最大层次
	
3.二叉树
	树中每个结点最多有2个子树,(子节点中有左右之分)
	特殊的二叉树:
		完美二叉树:
			除了最后一层终端结点,其余的结点的度都要为2
			
		完全二叉树:	
			给每个结点进行编号,从上至下,从左至右,与完美二叉树进行比较,
			如果所有的编号所在的位置是相同,就是
			否则不是。
			
4.二叉树的性质
	1. 一个二叉树 第i层 ,最多  2^i-1 结点
	
	2.深度为k的二叉树,最多具有 2^k -1 结点
	
	3.对于任何一个二叉树,终端结点的数目N0, 度为2的结点的个数为N2,则N0=N2+1
		证明:
			设 :度为1的结点的数目N1
			结点的总数:N= N1+N2+N0
			树中边的总数:N-1
			树中边的总数: N1+2*N2 = N1+N0+N2 -1
							N2=N0-1
	4.假设给一棵完全二叉树结点编号,从上至下,从左至右,从1开始编号,那么编号i的结点,
		左子结点的编号: 2*i     
		右子结点的编号:2*i+1
		其父结点的编号:i/2
	5.具有n个结点的完全二叉树深度为log2N 向下取整+1
		证明:
			
5.二叉树的存储			
	1.顺序
		typedef  int E; 
		E data[MAX_NODE];
	
	2.链式	
		struct Node
		{
			E data;
			struct Node* lchild;//左子树的位置
			struct Node* rchild;//右子树的位置
		};
		struct Tree
		{
			struct Node* root;
			int height;//树的高度 
			int num;//结点的个数
		};
		
6.二叉排序树(BST)
	1. 如果左子树不空,左子树上的结点均小于 根结点
	2. 如果右子树不空,右子树上的结点均大于 根结点
	3. 左子树和右子树也是二叉排序树

树的创建:

struct BTree
{
	struct Node* root;
	int height; 	//树的高度 
};
struct BTree* creatTree()
{
	
	struct BTree* tree=(struct BTree*)malloc(sizeof(*tree));
	tree->root=NULL;
	tree->height=0;
	return tree;	
}

具体请参考:https://download.csdn.net/download/pleboyzha/85035411

举报

相关推荐

0 条评论