二叉树的前序中序后续递归与非递归遍历及左右子树交换|Zam9036博客

本文介绍了如何使用C++进行二叉树的建立、前序、中序、后序递归与非递归遍历,并详细讲解了交换二叉树左右子树的算法。实验目标包括熟悉C++语法,掌握二叉树操作,以及理解递归与非递归遍历原理。
摘要由CSDN通过智能技术生成

编程语言

​ C++

问题描述

实验目的

​ 熟悉C++语法,了解树的概念,掌握二叉树的运算及应用,了解前序中序后序遍历二叉树的递归/非递归原理,能够实现将二叉树左右子树结点交换。

实验内容

生成一棵以二叉链表存储的二叉树(至少15个结点)

分别用递归和非递归的方法前序、中序、后序遍历该二叉树,并打印各结点信息

编写算法,交换该二叉树上所有结点的左右子树,并打印交换后各结点的信息

程序设计

程序要求

​ 生成一棵不少于15结点的二叉树,用二叉链表存储该二叉树。编写算法,利用递归算法实现该二叉树的前序中序后序遍历,并打印交换后各结点的信息。编写算法,利用非递归算法实现该二叉树的前序中序后序遍历,并打印交换后各结点的信息。编写算法,交换该二叉树上所有结点的左右子树,并打印交换后各结点的信息。

程序功能

​ 生成二叉树,递归/非递归的前中后序遍历二叉树,交换二叉树上所有结点的左右子树

算法分析

二叉树的建立

​ 定义一个节点(结点)类,类中有三种公有信息:char型的data用来存储当前节点的数据,两个node*指针型用来分别指向当前节点的左孩子和右孩子。

//定义节点类
class node
{
public:
	int data;	//节点信息
	node* leftChild;//节点指针:左孩子
	node* rightChild;//节点指针:右孩子
};
typedef node* BiTree;//等价,定义node*的新名字BiTree

​ 创建结点的方法:

//创建节点,加*号的意义:返回类型指针型数据
node* createNode(int value)
{
	node* q = new node;
	q->leftChild = NULL;	//leftChild指针为空
	q->rightChild = NULL;	//rightChild指针为空
	q->data = value;	//节点值等于value
	return q;	//返回节点
}

​ 建立二叉树的方法(提供两种方法,一种使用默认28节点的二叉树,一种通过调节N的自左向右输入节点值来建立二叉树)

//建立二叉树
BiTree createBiTree()
{
	node* p[N] = { NULL };
	//int array[28] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 };//默认建立28节点二叉树
	//自左向右输入节点值生成二叉树
	cout<<"请按自左向右顺序输入二叉树各节点:"<<endl;	//提示语
	int array[N];	//定义array数组用于存储节点信息
	for (int i = 0; i < N; ++i){
		cin >> array[i];	//储存输入节点的值
	}
	for (int i = 0; i < N; ++i)
		p[i] = createNode(array[i]);	//创建节点
	for (int i = 0; i < N / 2; i++)
	{
		p[i]->leftChild &#
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值