码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-04 14:09:27      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:void   src   efi   算法   visit   inf   图片   线索   描述   

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二叉树

标签:void   src   efi   算法   visit   inf   图片   线索   描述   

原文地址:https://www.cnblogs.com/hou36/p/9903521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!