实现二叉树中所有节点左右子树的交换

实现二叉树中所有节点左右子树的交换
实现二叉树中所有节点左右子树的交换

一、问题描述

二叉树是一种常见的特殊的树型结构,在计算机领域有着极为广泛的应用。在二叉树的一些应用中,常常要求在树中查找具有某些特征的结点或者对树中全部结点逐一进行某种处理,这就提出了遍历二叉树。根据遍历的方向的不同,有前序遍历、中序遍历、后序遍历以及层序遍历。在本次课程设计中,要求学生通过编写程序完成对二叉树的一些操作,比如可以构造二叉树、打印二叉树、遍历二叉树以及对左右子树进行交换等等。

二、基本要求

要求:。构造一颗20个节点的完全二叉树或

者20个节点以上的满二叉树。

实现如下步骤:

(1)实现二叉树的构造过程,并打印出二叉树

(2)对该二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历;

(3)将该二叉树的所有左右子树进行交换,得到新的二叉树,并打印出该二叉树;

(4)对新获得的二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历。

三、数据结构的设计

由数据结构中二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,所以在本程序二叉树的构造是采用二叉链表的链式存储结构,链表中的结点应包含三个域:数据域和左、右孩子的指针域。这种存储结构可以方便二叉树的建立以及遍历。

1、结点的数据结构

struct node

{

char data;

struct node *lchild,*rchild;

}

2、基本操作

void Create(BiTNode **p)

初始条件:按照结点的结构体构造二叉树;

操作结果:构造一棵二叉树。

主函数打印二叉树左右子树交换

void PreOrderTraverse(BiTree T)

初始条件:二叉树T存在;

操作结果:按照前序遍历方法遍历二叉树。

void InOrderTraverse(BiTree T)

初始条件:二叉树T存在;

操作结果:按照中序遍历方法遍历二叉树。

void PostOrderTraverse(BiTree T)

初始条件:二叉树T存在;

操作结果:按照后序遍历方法遍历二叉树。

void LevelOrderTraverse(BiTree T)

初始条件:二叉树T存在;

操作结果:按照层序遍历方法遍历二叉树。

void SwapChild(BiTNode **p)

初始条件:二叉树存在且交换的结点有子树;

操作结果:将二叉树左右结点交换。

void Paint(BiTree T)

初始条件:二叉树T存在;

操作结果:将二叉树的结点打印出来。

四、软件模块结构图

构造二叉树

菜单函数

遍历函数

完全二叉树操作演示

安徽省巢湖学院计算机与信息工程学院 课程设计报告 课程名称《数据结构》 课题名称完全二叉树操作演示 专业班级计算机科学与技术专升本1班 学号 14011016、14011040、14011019 姓名李鹏王帅李泳波 联系方式 指导教师严小燕 完成日期: 2014年 12月 27 日

目录 1 数据结构课程设计任务书 (1) 1.1题目 (1) 1.2目的 (1) 1.3要求 (1) 2 总体设计 (1) 2.1功能模块设计 (1) 2.2所有功能模块流程图 (1) 3 详细设计 (2) 3.1程序中所采用的数据结构及存储结构的说明 (2) 3.2算法设计思想 (3) 3.3主要的功能函数 (3) 4 调试与测试 (3) 4.1调试方法与步骤 (4) 4.2测试结果分析与讨论 (4) 4.3测试过程中遇到的主要问题及采取的解决措施 (5) 5 时间复杂度分析 (6) 6 程序清单 (6) 7 总结 (12) 参考文献 (13)

1 数据结构课程设计任务书 1.1题目 完全二叉树操作演示 1.2目的 (1)掌握二叉树的概念和性质。 (2)掌握完全二叉树存储结构。 (3)掌握完全二叉树的基本操作。 1.3 要求 (1)创建完全二叉树(用字母表示节点)(用顺序方式存储)。 (2)求二叉树的深度和叶子结点数。 (3)实现二叉树的前序、中序、后序和层次遍历。 (4)查找给定结点的双亲、祖先和左右孩子节点。 2 总体设计 2.1 功能模块设计 根据课程设计题目的功能要求,各个功能模块的组成框图如图1: 图 1 功能组成框图 2.2 所有功能模块流程图 设计好功能模块后,各个模块的关系如下图2:

二叉树节点计算法方法

1.6 树与二叉树 树是一种简单的非线性结构,所有元素之间具有明显的层次特性。 在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。 在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。树的最大层次称为树的深度。 二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。 二叉树的基本性质: (1)在二叉树的第k层上,最多有2k-1(k≥1)个结点; (2)深度为m的二叉树最多有2m-1个结点; (3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分; (5)具有n个结点的完全二叉树的深度为[log2n]+1; (6)设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论: ①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);

②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点); ③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。 满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。 完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。 二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。 二叉树的遍历: (1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树; (2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树; (3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。 设一棵完全二叉树共有700个结点,则该二叉树中有______个叶子结点? 最佳答案

相关文档
最新文档