数据结构——二叉树BinaryTree基本功能大全及代码实现(递归、非递归遍历、深度、结点数)

本文详细介绍了二叉树的基本功能,包括递归和非递归的先序、中序、后序遍历,层次遍历,计算根节点数和树的深度等。通过实例展示了算法设计和代码实现,加深了对数据结构中二叉树的理解。
摘要由CSDN通过智能技术生成

一、需求分析与功能描述

现代社会生活中,计算机扮演着重要角色,而随着计算机运行速度的不断加快,对数据的处理能力也日益增强,因此,程序所涉及的数据很多,如何科学有效的对数据进行操作,使得计算机的时间和空间利用率最高是一个问题。针对这样的问题,我选择了二叉树对数据的各种操作作为我的课程设计主题,希望通过二叉树来提高对数据的处理能力,促进对数据结构课程的理解。

在二叉树的应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理,这就是二叉树的遍历问题。

对二叉树的数据结构进行定义,建立一颗二叉树,然后进行各种实验操作。

二、数据结构的选择与设计

在遍历算法的实现中使用了栈结构与队列结构,

这大大方便了二叉树的遍历。

( 数组,二叉树,栈,队列,)

三、算法的选择与设计

1 .建立二叉树结构     

   建立二叉树时,要先明确是按哪一种遍历规则输入,该二叉树是按你所输入的遍历规则来建立的。本实验用的是先序遍历的规则进     行建树。二叉树用链表存储来实现,因此要先定义一个二叉树链表存储结构。因此要先定义一个结构体。此结构体的每个结点都是     由数据域data、左指针域Lchild、右指针域Rchild组成,两个指针域分别指向该结点的左、右孩子。

 

2. 输入二叉树元素 

    输入二叉树时,是按上面所确定的遍历规则输入的。最后,用一个返回值来表示所需要的结果.

 

3.  先序遍历二叉树 

     当二叉树为非空时,执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。

4. 中序遍历二叉树 

    当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。

 

5.  后序遍历二叉树 

     当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。

 

6.  非递归方式的先序遍历:

① 输出节点P,然后将其入栈,再看P的左孩子是否为空;

② 若P的左孩子不为空,则置P的左孩子为当前节点,重复①的操作;

③ 若P的左孩子为空,则将栈顶节点出栈,但不输出,并将出栈节点的右孩子置为当前节点,看其是否为空;

④ 若不为空,则循环至①操作;

⑤ 如果为空,则继续出栈,但不输出,同时将出栈节点的右孩子置为当前节点,看其是否为空,重复④和⑤操作;

⑥ 直到当前节点P为NULL并且栈空,遍历结束。

 

7.  非递归方式的中序遍历:

① 若P的左孩子不为空,则将P入栈并将P的左孩子置为当前节点,然后再对当前节点进行相同的处理;

② 若P的左孩子为空,则输出P节点,而后将P的右孩子置为当前节点,看其是否为空;

③ 若不为空,则重复①和②的操作;

④ 若为空,则执行出栈操作,输出栈顶节点,并将出栈的节点的右孩子置为当前节点,看起是否为空,重复③和④的操作;

⑤ 直到当前节点P为NULL并且栈为空,则遍历结束。

 

8.  非递归的后序遍历:

① 先将节点P入栈;

② 若P不存在左孩子和右孩子,或者P存在左孩子或右孩子,但左右孩子已经被输出,则可以直接输出节点P,并将其出栈,将出栈节点P标记为上一个输出的节点,再将此时的栈顶结点设为当前节点;

③ 若不满足②中的条件,则将P的右孩子和左孩子依次入栈,当前节点重新置为栈顶结点,之后重复操作②;

④ 直

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值