二叉树(1)——定义,性质及结构

一 

二叉树定义:

满足以下三个条件

1,根节点

2,去跟,分成两个不相交的集合TL和TR

3,TL和TR也为二叉树(递归定义)

基本形态:

由三个节点构成的二叉树的个数

性质:

1,第i层有2^(i-1)个节点

2,深度为k的二叉树,做多为 2^(k)-1个节点

      k层二叉树有2^(k)-1个节点,叫蛮二叉树

3,度为0的节点的个数为n0

      度为1的节点的个数为n1

      度为2的节点的个数为n2

      则n0=n2+1

     推导过程:

     设节点总数为n,分支数为b

     则:

    n=n0+n1+n2

    b=n1+2n2

    b=n-1

4,假如一棵包含 n 个结点的二叉树中每个结点都可以和满二叉树中编号为1至 n 的结点一、一对应,则称这类二叉树为完全二叉树

      n个节点的完全二叉树,深度为[log2 n]+1

5,完全二叉树中,编号为i的节点,左孩子编号为2i,有孩子为2i+1,双亲编号为floor(i/2)

存储结构

1,顺序 先补成完全二叉树

const MAXSIZE = 100;  // 暂定二叉树中结点数的最大值为100
  typedef struct {
   ElemType *data;    // 存储空间基址(初始化时分配空间)
   int nodeNum;     // 二叉树中结点数
  } SqBiTree;       // 二叉树的顺序存储结构 

2,链式

二叉链表:

左孩子域和右孩子域

typedef struct BiTNode { 
   ElemType data; 
   struct BiTNode *Lchild, *Rchild; // 左、右孩子指针 
  } *BiTree;



三叉链表:

typedef struct TriTNode {
   ElemType data;
   struct BiTNode *Lchild, *Rchild; // 左、右孩子指针
   struct BiTNode *parent;     // 双亲指针
  } *TriTree;

双亲链表

const MAXSIZE = 100;        // 暂定二叉树中结点数的最大值为100
  typedef struct BPTNode {        // 结点结构
   ElemType data;
   int *parent;              // 指向双亲的指针 
   char LRTag;               // 左、右孩子标志域
  } BPTNode
  typedef struct BPTree{         // 树结构 
   BPTNode *nodes;             // 初始化时分配存储空间
   int nodeNum;              // 结点数目 
   int root;               // 根结点的位置
  } BPTree
   cin>>BT.nodeNum;            // 输入结点数目
   BT.root=0;
   cin>> BT.nodes[0].data;         // 输入根
   BT.nodes[0].parent = -1;        // 根的双亲为空
   BT.nodes[0].LRTag = 'L'; 
   for (i=1; i<BT.nodeNum; i++)
   {
    cin>> BT.nodes[i].data >> F >>BT.nodes[i].LRtag;
    k=i-1;
    while (k>=0 && BT.nodes[k].data != F) k--; // 查询双亲
    if (k<0) return FALSE;        // 没有找到双亲
    BT.nodes[i].parent = k;
    return TRUE;
   }
  }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章