数据结构-树(上)

  • 树的表示:(法1)结构+链表

*优点:结构统一,易于处理;

*缺点:结构的统一会造成空间上的浪费,比如3n个指针域,实际只需n-1个指针域;

  • 树的表示:(法2)儿子-兄弟表示法(二叉树)

*形式:1个结点2个指针,分别指向第1个儿子和下1个兄弟;

*优点:结构统一,且空间浪费不大[为2n-(n-1)];

*二叉树在树的研究中是最重要且最主要的树;

  • 二叉树的定义
typedef struct TNode *Position;
typedef Position BinTree;/*二叉树类型*/
struct TNode /*树结点定义*/ 
{
    ElementType Data;      /*结点数据*/
    BinTree Left;        /*指向左子树*/
    BinTree Right;        /*指向右子树*/     
};

*度为2的树,且该树有左右之分;

*特殊的二叉树:

斜二叉树:左斜或右斜,一条直线的链;

完美二叉树(满二叉树):所有结点皆满;

完全二叉树:(类似于满二叉树)上至下,左至右编号,且允许不满,且必须从右边开始缺子树;

  • 二叉树的重要性质:

*二叉树第i层的最大结点数:2^(i-1);

*深度为K的二叉树的最大结点总数(完美二叉树):[2^k]-1;

*n0:叶结点的个数,n1:度为1的非叶结点的个数,n2:度为2的非叶结点的个数,满足:n0=n2+1;

  • 二叉树的操作集:

(1)判断BT是否为空;

(2)按顺序遍历;

*先序遍历:根、左子树、右子树

*中序遍历:左子树、根、右子树

*后序遍历:左子树、右子树、根

*层次遍历:从上到下、从左到右

(3)创建一个二叉树;

  • 二叉树的存储结构:

(1)完全二叉树(从上到下、从左到右编号)【数组存储】:

*非根节点的父结点的序号为i/2往下取整;

*结点的左孩子:2i;(若2i<=n)

*结点的右孩子:2i+1;(若2i+1<=n)

(2)一般的二叉树

(可以采用上面这种顺序结构,但是会造成空间的浪费)【数组存储】

(链表存储一般二叉树,避免浪费空间)【链表存储】

 

hello world~
原文地址:https://www.cnblogs.com/Bran-don/p/10452834.html