一.基本概念
每个节点最多有2棵子树,左子树和右子树,次序不可颠倒
性质: 1.非空二叉树的第n层上至多有2^(n-1)个元素 2.深度为h的二叉树至多有2^h - 1个节点
满二叉树
:所有终端都在同一层次,且非中断结点的度数为2。
在满二叉树中若其深度为h,则包括所包含的结点树必为2^h - 1
完全二叉树
:除了最大的层次即成为一颗满二叉树,且层次最大那层的所有结点均向左靠齐,即集中在左面的位置上,不能有空位置。
对于完全二叉树,设一个结点为i,则其父结点为i/2, 2i为左子节点,2i + 1为右子节点
二.存储结构
顺序存储:将数据结构存在一块固定的数组中
`
define LENGTH 100
typedef char datatype;
typedef struct node{
datatype data;
int lchild,rchild;
int parent;
}Node;
Node tree[LENGTH];
int length;
int root;
`
虽然在遍历速度上有一定的优势,但因所占空间比较大,是非主流二叉树,二叉树通常以链式存储
链式存储:
`
typedef char datatype;
typedef struct BinNode{
datatype data;
struct BinNode *lchild;
struct BinNode *rchild;
}BinNode;
typedef BinNode *bintree;
`
三.二叉树的遍历
遍历即将所有结点访问且仅访问一次,按照根结点的位置不同分为前序遍历,中序遍历,后序遍历:
前序遍历: 根结点-> 左子结点 - >右子结点 中序遍历:左子结点 - > 根结点 ->右子结点 后序遍历: 左子结点 - >右子结点 - > 根结点
e.g.:
前序遍历:abdefgc 中序遍历:debgfac 后序遍历: edfgbca