当前位置: 首页 > news >正文

【遍历二叉树的非递归算法,二叉树的层次遍历】

文章目录

  • 遍历二叉树的非递归算法
  • 二叉树的层次遍历

遍历二叉树的非递归算法

先序遍历序列建立二叉树的二叉链表

中序遍历非递归算法
二叉树中序遍历的非递归算法的关键:在中序遍历过某个结点的整个左子树后,如何找到该结点的根以及右子树。
基本思想:
(1)建立一个栈
(2)根结点进栈,遍历左子树
(3)根结点出栈,输出根结点,遍历右子树。

二叉树的层次遍历

对于一棵二叉树来说,从根结点开始从左到右,从上到下。
每个结点只访问一次。
在这里插入图片描述
算法设计思路:
1.按节点进队;
2.队不空时循环:从队列中出列一个结点*p,访问它:①若他有左孩子结点,将左孩子结点进队。②若它有右孩子,将右孩子先进队。

#include<iostream>
using namespace std;
#define TElemType inttypedef struct BiNode {TElemType data;struct BiNode* lchild, * rchild;//左右孩子指针
}BiNode,*BiTree;//菜单
void menu() {cout << "1.初始化" << endl;cout << "2.创建树" << endl;cout << "3.复制树" << endl;
}//初始化
void initList(BiTree T) {T = new BiNode;if (!T) {exit(0);//开辟空间失败}else {T->data = 0;}
}//创建树
BiTree createLink(){BiTree T;int data;cout << "请输入data的值:" << endl;cin >> data;if (data == -1) {//说明他的下子树不再存东西return NULL;}else {T = new BiNode;T->data = data;cout << "请输入左子树的值:" << endl;cin >> data;T->lchild = createLink();cout << "请输入右子树的值:" << endl;cin >> data;T->rchild = createLink();return T;}
}//复制二叉树
int Copy(BiTree T, BiTree& NewT) {if (T == NULL) {NewT = NULL;return 0;}else {NewT = new BiNode;NewT->data = T->data;Copy(T->lchild, NewT->lchild);Copy(T->rchild, NewT->rchild);}
}//int PreOderTraverse(BiTree T) {
//	if (T == NULL) {
//		return 1;
//	}
//	else {
//		cout << "输出T的头结点的值:" << T->data;
//		PreOderTraverse(T->lchild);//递归调用左子树
//		PreOderTraverse(T->rchild);//递归调用右子树
//	}
//}int main() {int choose = 1;BiTree T;T = new BiNode;while (true) {menu();cout << "请输入您选择的功能:" << endl;cin >> choose;switch (choose){case 1:initList(T);cout << "初始化成功!" << endl;break;case 2:createLink();cout << "创建成功!" << endl;break;default:break;}}return 0;
}
http://www.lryc.cn/news/223908.html

相关文章:

  • 数模之线性规划
  • 【C++】AVL树的4中旋转调整
  • 【MATLAB源码-第69期】基于matlab的LDPC码,turbo码,卷积码误码率对比,码率均为1/3,BPSK调制。
  • Java获取时间戳、字符串和Date对象的相互转换、日期时间格式化、获取年月日
  • 用c语言实现矩阵转置
  • 蓝桥杯官网练习题(移动距离)
  • 不止于“初见成效”,阿斯利康要让数据流转,以 AI 带动决策智能
  • nav2 调节纯追踪算法
  • 安装RabbitMQ
  • Spring基础(1):两个概念
  • 国产化精密划片机已得到国内更多厂家青睐
  • Voice Control for ChatGPT简单高效的与ChatGPT进行交流学习。
  • flutter生态一统甜夏 @Android @ios @windowse @macos @linux @Web
  • 计算机基础知识49
  • el-table给某一行加背景色
  • 搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板
  • Unity场景ab包加载压缩(LZ4,LZMA)格式的测试
  • 私有化部署大模型:5个.Net开源项目
  • 安卓系统手机便签app使用哪一款?
  • SpringCloud-Gateway无法使用Feign服务(2021.X版本)
  • 基于SSM的建筑装修图纸管理平台
  • Apache Doris (五十二): Doris Join类型 - Broadcast Join
  • Docker从入门到上天系列第四篇:docker平台入门图解与平台架构图解
  • 安全防御——四、防火墙理论知识
  • 如何给PPT幻灯片解除密码保护以防止编辑
  • 在linux安装单机版hadoop-3.3.6
  • Hadoop相关
  • ArcGIS 气象风场等示例 数据制作、服务发布及前端加载
  • 【Axure高保真原型】树切换动态面板案例
  • 安装pr提示VCRUNTIME140.dll丢失的修复方法,3个有效的方法