数据结构——第三章树和二叉树:02二叉树

Posted hou36

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——第三章树和二叉树:02二叉树相关的知识,希望对你有一定的参考价值。

1.二叉树的存储结构:

(1)二叉树的顺序存储表示:

#define MAX_TREE_SIZE 100 //二叉树的最大结点数

typedef TElemType SqBiTree[MAX_TREE_SIZE]; 

SqBiTree bt;

技术分享图片

(2)二叉树的链式存储表示:

①二叉链表:

typedef struct BiTNode //结点结构

{

  TElemType data;

  struct BiTNode *lchild, *rchild; //左右孩子指针

} BiTNode, *BiTree;

技术分享图片

②三叉链表:如要找某个结点的父结点,在三叉链表中很容易实现,在二叉链表中则需从根指针出发一一查找。

typedef struct TriTNode //结点结构

{

  TElemType data;

  struct TriTNode *lchild, *rchild; //左右孩子指针

  struct TriTNode *parent; //双亲指针

} TriTNode, *TriTree;

技术分享图片

③线索链表:

 

2.若一个二叉树中含有n个结点,则它的二叉链表中必含有2n个指针域,其中必有n + 1个空的链域。

证明:分支数目B = n - 1,即非空的链域有n - 1个,空链域有2n - (n - 1) = n + 1个。

3.二叉树的遍历:顺着某一条搜索路径巡防二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。对于二叉树可以有三条搜索路径:先上后下的按层次遍历;先左(子树)后右(子树)的遍历;先右子树后左子树的遍历。

(1)先左后右的遍历算法:递归操作

①先根遍历:若二叉树为空树,则空操作;否则,访问根结点->先序遍历左子树->先序遍历右子树。

先根遍历的递归算法描述:

void Preorder(BiTree T)

{

  if (T)

  {

    visit(T->data); //访问根结点

    Preorder(T->lchild); //遍历左子树

    Preorder(T->rchild); //遍历右子树

  }

}

②中根遍历:若二叉树为空树,则空操作;否则,中序遍历左子树->访问根结点->中序遍历右子树。

③后根遍历:若二叉树为空树,则空操作;否则,后序遍历左子树->后序遍历右子树->访问根结点。

4.

5.

6.

7.

8.

9.

10.

以上是关于数据结构——第三章树和二叉树:02二叉树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——第三章树和二叉树:03树和森林

Java 数据结构树和二叉树

C语言数据结构树和二叉树的问题

数据结构学习笔记——广义表树和二叉树的基本知识

数据结构学习笔记——广义表树和二叉树的基本知识

数据结构学习笔记——广义表以及树和二叉树的基本知识