欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表

程序员文章站 2022-05-06 21:29:46
...

一、二叉树定义

二叉树的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒

下面是含三个结点的二叉树(方便理解)

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表


二、二叉树性质

1、在二叉树的第i层上至多有2^(i-1)个结点(i>=1):比如第1层只有一个结点(根)

2、深度为k的二叉树至多有2^(k)-1个结点(k>=1)

3、对任何一个二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1

4、具有n个结点的完全二叉树的深度为x+1,(x不大于log2n)(2是底数)


三、满二叉树与完全二叉树

满二叉树

一棵深度为k且有2^(k)-1个结点的二叉树称为满二叉树(不存在度为1的结点,只有0和2)

完全二叉树

深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应(左右子树也不能颠倒)

下面是我觉得比较好理解满二叉树与完全二叉树的几幅图

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表


四、二叉树顺序存储结构(对象:完全二叉树)

用一组地址连续的存储单元依次自上而下,自左至右存储完全二叉树的结点元素,即将完全二叉树编号为i的结点元素存储在如下定义的一维数组中下标为i-1的分量中。(下标从0开始)

#define MAX_TREE_SIZE 100//定义二叉树最大结点数
typedef TElemType SqBiTree[Max_Tree_Size];//0号单元存储根结点
SqBiTree bt;

五、二叉树链式存储结构(二叉链表)

链式存储包含三个域:(数据域,左指针域,右指针域),二叉链表方便找左右孩子,不方便找双亲(因为没有指向双亲的指针域)

typedef struct BiTNode{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表


六、三叉链表

比二叉链表多了一个指向双亲的指针域

typedef struct BiTPNode
 {
   TElemType data;
   struct BiTPNode *parent,*lchild,*rchild; /* 双亲、左右孩子指针 */
 }BiTPNode,*BiPTree;

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表


七、双亲链表(数组存储法)

typedef struct BPTNode{//结点结构
    TElemType data;
    int *parent;//指向双亲的指针
    char LRTag;//左,右孩子的标志域
}BPTNode;
typedef struct BPTree{//树结构
    BPTNode *nodes;
    int num_node;//结点数目
    int root;//根结点的位置
}BPTree;

双亲理解图

二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表