数据结构与算法
1. 二叉树
1.1 相关概念
在计算机中,二叉树是指每个节点最多只有两个子节点的树形结构
其中起始节点叫做根节点,整个二叉树只有一个根节点,除了根节点外每个数只有一个父节点
没有任何子节点的节点叫做叶子节点,除了根节点和叶子节点外,剩下只有枝节点(只有两个子节点)
二叉树每层中节点钧达到最大值为满二叉树
完全二叉树,在满二叉树的基础上叶子节点不满也靠左边
1.2 基本特征
二叉树具有递归嵌套的空间结构,也就是说对于一颗二叉树来说,可以拆分为若干个小二叉树组成
因此采用递归的方法处理二叉树比较方便,
如:
处理(二叉树)
{
if (是空树)
直接处理完毕;
else
{
处理根节点;
处理左子树; =》递归
处理右子树; =》递归
}
}
1.3二叉树的存储结构
(1)顺序存储结构
从上至下,从左到右一次存储节点,对于非完全二叉树来说采用虚拟节点来补成完全二叉树
(2)链式存储结构
一般来说,每个节点除了存储数据元素本身之外,还需要两个指针分别记录左右节点的地址
如:
typedef struct Node {
int data;//数据内容
struct Node* left;//记录左子树
struct Node* rignt; //记录右子树的地址
}
1.4 基本操作
创建 、销毁、插入新元素、删除元素、查找指定元素、
修改指定元素、判断二叉树是否为满、判断二叉树是否为空
计算二叉树节点个数、获取根节点的元素值、遍历操作
1.5 二叉树的遍历方式
(1)先序遍历(DLR - data left right)
先遍历根节点,在遍历左子树,最后遍历右子树
(2)中序遍历(LDR - left data right)
先遍历左子树,再遍历遍历根节点,最后遍历右子树
(3)后续遍历(LRD - left ringht data)
先左子树,在遍历右字数,最后遍历根节点
1.6 有序二叉树(应用广泛)
一般来说,当左子树不为空,则左子树的元素值小于等于根节点;
右子树元素值大于等于根节点,左右子树也是有序的,满族上述特征的二叉树,叫做有序二叉树