数据结构——二叉树


发布于 2016-07-09 / 27 阅读 / 0 评论 /
树形结构的特点是有多个直接后继,但是只有一个直接前驱

1.二叉树概述

Binary Tree

1.1.二叉树的定义

二叉树是结点的有限集合,它可以为空树,或者是根结点和两个互不相交的子树构成,其左右两个子树都是二叉树。

二叉树是有序树,必须严格区分左右子树。

如下图所示:

1.2.二叉树的操作

二叉树的运算比较多。

(1)create:创建二叉树

(2)clear:清空二叉树所有结点

(3)isEmpty:二叉树是否为空树

(4)root:二叉树的根结点

(5)parent:找某个节点的父结点

(6)lchild:找某个节点的左儿子结点

(7)rchild:找某个节点的右儿子结点

(8)delLeft:删除某个节点的左子树

(9)delRight:删除某个节点的右子树

(10)traverse:遍历二叉树上的每一个节点

1.3.二叉树的遍历

二叉树有三种遍历方式。

1.3.1.前序遍历

先访问根结点,再访问左子树,最后访问右子树

1.3.2.中序遍历

先访问左子树,再访问根结点,最后访问右子树

1.3.3.后序遍历

先访问左子树,然后访问右子树,最后访问根结点

1.4.满二叉树

又叫丰满树,二叉树中任意一层的结点数都达到了最大值。

如下图所示:

1.5.完全二叉树

完全二叉树是满二叉树的最底层从右到左连续剪除若干个节点。

所以,满二叉树也是完全二叉树。

完全二叉树例如下图所示:

2.二叉树的顺序实现

顺序存储就是将节点存放在数组中,通过数组下标之间的关系表示数据元素之间的父子关系。

二叉树如何转换为数组存储?下面通过案例来说明

(1)构造一个二叉树

(2)将此二叉树补充为一颗完全二叉树

补充了4个节点(灰色)。

(3)将完全二叉树转换为数组

这里数组存储的下标从1开始。下标0不存放任何数据。

这里可以看出,对于数组中下标为k的结点,,其父结点是数组中下标为k/2的元素,其左结点下标为2k,右结点下标为2k+1

3.二叉树的链表实现

二叉树的链表有两种表现形式。

3.1.二叉链表

也是标准存储结构。

结点结构如下图所示:

每个元素有两个引用,分别指向左子树和右子树。

二叉链表例如下图所示:

共有8个结点,或者说8个元素。

3.2.三叉链表

被称为广义存储结构。

结点结构如下图所示:

每个元素有三个引用,分别指向左子树(L)、右子树(R)、父结点(P)。

三叉链表例如下图所示: