数据结构与算法学习笔记 (9)--树与二叉树及相关概念

一、树

树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

 

每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树

 

相关概念

度数:一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数。

节点:度数为零的节点称为树叶或终端节点,度数不为零的节点称为分支节点,除根节点外的分支节点称为内部节点。

父子节点:一个节点的子树之根节点称为该节点的子节点,该节点称为它们的父节点,同一节点的各个子节点之间称为兄弟节点。一棵树的根节点没有父节点,叶节点没有子节点。

树的路径:一个节点系列k1,k2, ……,ki,ki+1, ……,kj,并满足ki是ki+1的父节点,就称为一条从k1到kj的路径,

树的边数:路径的长度为j-1,即路径中的边数。路径中前面的节点是后面节点的祖先,后面节点是前面节点的子孙。

树的深度:节点的层数等于父节点的层数加一,根节点的层数定义为一。树中节点层数的最大值称为该树的高度或深度。

有序树:若树中每个节点的各个子树的排列为从左到右,不能交换,即兄弟之间是有序的,则该树称为有序树。一般的树是有序树。

森林:m(m≥0)棵互不相交的树的集合称为森林。树去掉根节点就成为森林,森林加上一个新的根节点就成为树。


结点A的度:3
结点B的度:2
结点M的度:0
树的度:3

结点A的层次:1
结点M的层次:4
树的深度:4

A的子节点:B,C,D
I的父节点:D
F,G为兄弟结点

 

 

树的逻辑结构 :树中任何节点都可以有零个或多个直接后继节点(子节点),但至多只有一个直接前趋节点(父节点),根节点没有前趋节点,叶节点没有后继节点。

 

二、二叉树

在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

 

二叉树是有序树,与普通有序树不同,二叉树严格区分左孩子和右孩子,即使只有一个子节点也要区分左右。

 

满二叉树:深度为k(k≥1)时有2k-1个节点的二叉树。

完全二叉树:只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。

 

二叉树性质

  • 二叉树第i(i≥1)层上的节点最多为2^(i-1)个。
  • 深度为k(k≥1)的二叉树最多有2^k-1个节点。
  • 在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一。

 

二叉树存储结构

1.顺序存储结构

 
若二叉树不是完全二叉树,通过补虚节点,将其补成完全二叉树。
按从上到下,从左到右的顺序编号,根节点为1
按编号一次存储在连续空间中,虚节点用特殊符号标识即可。

 

 

2.链式存储结构

btree_pnode指向根节点,通过btree_pnode->lchild指向左子树的根结点,btree_pnode->rchild 指向右子树的根结点!

typedef char dataype_bt;

typedef struct btreenode{
	dataype_bt data;
	struct btreenode *lchild,*rchild;
}btree_node,*btree_pnode;

 

全部评论

相关推荐

10-29 16:42
门头沟学院 Java
1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下 1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点 2.根据1中的两点准备 3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了 4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题 好好准备,祝你面试顺利
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务