二叉树的实现和遍历
1、二叉树基础知识:
性质1、在二叉树的第i层上至多有2^(i-1)个结点;
性质2、深度为k的二叉树至多有2^k-1个结点;
性质3、对任何一棵二叉树,如果其终端节点数为n0,度为2的结点数为n2,则n0=n2+1;
性质4、具有n个节点的完全二叉树的深度为[logn]+1 ,这里[ ]表示向下取整。
性质5、对一棵有n个节点的完全二叉树的结点按层序编号(从上往下,自左而右),则对任一结点i(1<=i<=n),有
a、如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)=[i/2],这里[ ]表示向下取整。
b、如果2i>n,则结点i无左孩子(即终端结点),否则其左孩子LCHILD(i)=2i;
c、如果2i+1>n,则结点i无右孩子,否则其右孩子RCHILD(i)=2i+1。
二叉树的存储结构也可以有顺序存储和链式存储两种。
顺序存储适合完全二叉树,对完全二叉树进行编号,编号为i的结点存储在第(i-1)个存储单元中。但对一般二叉树采用顺序存储结构,空树也要占用存储单元,会浪费存储空间。
链式存储又包括二叉链表和三叉链表,前者有2个指针域,分别指向左、右孩子,而三叉链表有3个指针域,多出1个指向双亲结点的指针。
2、二叉树的遍历
二叉树的递归遍历算法可以分为先序遍历、中序遍历、后序遍历。假如以L、D和R分别表示遍历左子树、访问根结点和遍历右子树,则:
先序遍历:DLR
中序遍历:LDR
后续遍历:LRD
不论按哪一种次序进行遍历,对含有n个结点的二叉树,其时间复杂度均为O(n)。
3、线索二叉树(Threaded Binary Tree)
遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,这实质上是对一个非线性序列进行线性化操作,使每个结点在这个线性序列中有且仅有一个直接前驱和后继。在二叉链表中,我们只能得到每个结点的左右孩子信息,而不能得到结点在某次有序遍历中的直接前驱和后继。一个最简单的办法是在每个结点上增加两个指针域fwd和bkwd,分别指示结点在任一次序遍历时得到的前驱和后继信息,但这样做会大大降低使结构的存储密度。我们知道,含有n个结点的二叉链表存在n+1个空链域(由于n0=n2+1,因此2n0+n1=n0+n1+n2+1=n+1)。利用这些空链域存储其他有用信息,可以得到线索链表,如下图所示。
分享到:
相关推荐
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
2.用递归及非递归算法对二叉树实现先序遍历; 3.用递归及非递归算法对二叉树实现中序遍历; 4.用递归及非递归算法对二叉树实现后序遍历。 5.用递归遍历算法中的访问结点的操作修改为叶结点计数,统计度为0的;度为1...
实现二叉树的层次遍历实现二叉树的层次遍历实现二叉树的层次遍历实现二叉树的层次遍历
建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
数据结构C++二叉链表的先序遍历、中序遍历和后序遍历实现
采用二叉链表存储,实现二叉树的创建、遍历(递归)、赫夫曼编码和译码等典型操作。 1. 编程实现如下功能: (1)假设二叉树的结点值是字符型,根据输入的一棵二叉树的完整先序遍历序列(子树空用’#’表示),建立...
二叉树的层次遍历
利用递归方式完成二叉树的简单创建以及遍历。
链表实现二叉树创建和遍历,三种遍历方式实现,二叉树
一、实验名称:二叉树的遍历方法 二、实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点...要求:从键盘输入先序序列,以二叉链表作为存储方式,建立二叉树实现遍历,采用递归和非递归的两种方法实现。
C语言实现二叉树的前序遍历(非递归),下载下来看看哦!
2)对这棵二叉树进行先序遍历(采用递归算法实现)与中序遍历(采用非递归算法实现),分别输出结点的遍历序列; 2)求二叉树的深度(选做)。 这是本人所做的作业,虽然分有点多,但还是有所值的!
使用C++模板、类的技术实现了二叉树的中序遍历,在BC3.1已经测试成功
二叉树的建立和遍历算法 数据结构课程设计用
经典的数据结构问题:二叉树非递归遍历算法实现 二叉树递归遍历算法实现
数据结构的代码实现,非递归算法,。
实现功能:建立二叉树存储结构、求二叉树的先序遍历、求二叉树的中序遍历、求二叉树的后序遍历、求二叉树的层次遍历、求根到给定结点的路径。 主控菜单: 1.建立二叉树存储结构 2.求二叉树的先序遍历 3.求二叉树...
根据先序与中序遍历结果建立二叉树 输入为: 第一行:二叉树的先序遍历结果 第二行:二叉树的中序遍历结果 例如: ①输入aa则返回的指针指向的二叉树应该就是仅有一个节点,值为a. ②输入123213则返回的指针指向...
二叉树的实现各种遍历算法,插入删除成员函数非常全。二叉树的实现各种遍历算法,插入删除成员函数非常全