学习了一下树的基本知识
树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。
并了解了一些树的结构中的一些特定名词,双亲,度,堂兄弟等等。
树的存储方式有这几种
//双亲表示法
#define MAX_TREE_SIZE 100
typedef int TElemType;
typedef struct PTNode {
TElemType data;
int parent;
}PTNode;
typedef struct {
PTNode nodes[MAX_TREE_SIZE];
int r, n;
}PTree;
//孩子表示方法
#define MAS_TREE_SIZE 1000
typedef int TElemType;
typedef struct CTNode {//孩子节点
int child;
struct CTNode* next;
}*ChildPtr;
typedef struct { //表头节点
TElemType data;
ChildPtr firstchild;
}CTBox;
typedef struct { //树结构
CTBox noded[MAS_TREE_SIZE]; //结点数组
int r, n; //根的位置和结点数
}CTree;
以及了解了一些二叉树的基本概念
二叉树是n(n>=0)
个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。
二叉树特点
由二叉树定义以及图示分析得出二叉树有以下特点:
- 每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
- 左子树和右子树是有顺序的,次序不能任意颠倒。
- 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
并了解了一些二叉树的性质
1,在二叉树的第i层上至多有2的i-1次方个结点
2,深度为k的二叉树至多有2的k次方-1个节点
3,对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
4,具有n个结点的完全二叉树的深度为【log2n】+1