一、树

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

 

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

 

相关概念

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

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

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

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

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

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

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

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


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

结点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.顺序存储结构

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

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

 

 

2.链式存储结构

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

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;