每日一题 递归遍历二叉树

先序遍历、中序遍历、后序遍历 

#include <iostream>
#include <queue>
using namespace std;
//层次建树
//元素 -> 创一个结点
//队列的结点含义:新加入结点的位置 每创一个结点左右孩子入队
//步骤:遍历字符串
//root 队列结点设计
//结点 左右孩子入队
//root为空 改变root指向
//root非空 访问队列 改变左右孩子指向 出队//结点
struct TreeNode{//数据域char data;//指针域 左子树 右子树TreeNode * leftchild;TreeNode * rigtchild;
};
//队列设计 队列结点含义:结点地址 左还是右
struct QueueNode{TreeNode *parent;//新节点的父亲地址bool isleft;//左边是否插入过
};
//插入元素层次建树 修改root的指向
void inserTreeNode(TreeNode * &root, queue<QueueNode *> &myqueue,char data){if(data !='#'){//创建结点 申请在堆空间TreeNode * pTreeNode=new TreeNode;//pTreeNodepTreeNode->data=data;//入队 队列里的结点 将刚创好的结点信息放入队列里的结点QueueNode * pQueueNode=new QueueNode;//pQueueNodepQueueNode->parent=pTreeNode;pQueueNode->isleft= false;myqueue.push(pQueueNode);//插入if(root==NULL){//插入的是第一个结点root=pTreeNode;} else{//插入不是根//pParent 用来定位父亲结点的位置QueueNode *pParent =myqueue.front();if(pParent->isleft == false){pParent->parent->leftchild=pTreeNode;//队列结点里元素结点左孩子地址pParent->isleft= true;} else{pParent->parent->rigtchild=pTreeNode;myqueue.pop();//出队delete pParent;//队首无用}}} else{//是# 插入空if(root !=NULL){QueueNode *pParent =myqueue.front();if(pParent->isleft == false){pParent->parent->leftchild=NULL;pParent->isleft= true;} else{pParent->parent->rigtchild=NULL;myqueue.pop();delete pParent;}}}
}//递归遍历
//大问题分成若干个子问题
//大树->分成几个子树 先序遍历、中序遍历、后序遍历
//小问题解决 没有子树为空
void PreOder(TreeNode *root){//先序if(root==NULL){return;}printf("%c",root->data);//根PreOder(root->leftchild);//左子树PreOder(root->rigtchild);//右子树
}
void InOrder(TreeNode *root){//中序if(root==NULL){return;}InOrder(root->leftchild);//左子树printf("%c",root->data);//根InOrder(root->rigtchild);//右子树
}
void PostOrder(TreeNode *root){if(root==NULL){return;}PostOrder(root->leftchild);//左子树PostOrder(root->rigtchild);//右子树printf("%c",root->data);//根
}
int main() {TreeNode *root=NULL;//指向根结点//新加入的结点应该放在哪个位置?放完第一个结点左右孩子 再放第二个 由结点放入的顺序决定——队列char charList[]="abc##de#g##f###";queue<QueueNode *> myqueue;for(int i=0;charList[i]!='\0';++i){inserTreeNode(root,myqueue,charList[i]);}PreOder(root);printf("\n");InOrder(root);printf("\n");PostOrder(root);printf("\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware虚拟机清理瘦身

用了一段时间VMware虚拟机之后&#xff0c;发现内存越来越小&#xff0c;也没装什么软件。。。 1.查询磁盘空间分布 虚拟机中磁盘空间查询 先看一下哪些地方占用的空间大&#xff0c;进行排查。 2.排查VMware复制文件产生的缓存路径 VMware复制文件有一个特点&#xff0c;以…

SpringBoo+Vue构建简洁日志文件查看系统

点击下载《SpringBooVue构建日志文件查看系统&#xff08;源代码&#xff09;》 1. 前言 想必经常做java开发的小伙伴&#xff0c;其大多数服务都是运行在linux系统上的&#xff0c;当遇到一些比较棘手的bug需要处理时&#xff0c;经常要上服务器去捞日志&#xff0c;然后通过…

LeetCode210. Course Schedule II——拓扑排序

文章目录 一、题目二、题解 一、题目 There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] [ai, bi] indicates that you must take course bi first if you want t…

单片机学习笔记---串口通信(1)

目录 通信的基本概念 通信的方式 1.按照数据传送的方式&#xff0c;可分为串行通信和并行通信。 1.1串行通信 1.2并行通信 2.按照通信的数据同步方式&#xff0c;又可以分为异步通信和同步通信。 2.1 异步通信 2.2同步通信 3.按照数据的传输方向&#xff0c;又可以分为…

恒创科技:怎么看云主机的性价比

随着云计算技术的不断发展&#xff0c;云主机已经成为越来越多企业和个人用户的首选计算资源。然而&#xff0c;在选择云主机时&#xff0c;性价比是一个非常重要的考虑因素。那么&#xff0c;怎么看云主机的性价比呢&#xff1f; 通常来说&#xff0c;云主机的成本主要包括硬…

博途PLC报警字FC(字寄存器按位访问)

博途PLC的字寄存器按位访问和拆分,请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/121727057https://rxxw-control.blog.csdn.net/article/details/121727057西门子触摸屏报警都是以字为地址访问,所以离散报警信号我们需要将其组合为报警字输出,…

jsp教务管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教务管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Python操作Word表格对齐、单元格对齐

通过Table的alignment可以设置表格居左对齐、居中对齐、居右对齐。通过Cell的vertical_alignment可以设置垂直位置。通过单元格里段落的alignment可以设置文本的左右对齐方式。 import docx from docx.enum.table import WD_TABLE_ALIGNMENT, WD_CELL_VERTICAL_ALIGNMENT from…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Video媒体组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Video媒体组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Video媒体组件 用于播放视频文件并控制其播放状态的组件。 子组件 无 接口…

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

go modules使用

创建项目 在使用GoLand创建项目的时候&#xff0c;会自动创建对应的go.mod文件。 创建完后 创建文件 创建一个main.go的文件&#xff0c;里面print一个hello world。 在运行时可以设置是否采取先生成文件再运行。 为空的话则不输出。 下面的Environment为设置运行的环境…

【Ubuntu 20.04/22.04 LTS】最新 esp-matter SDK 软件编译环境搭建步骤

仓库链接&#xff1a;esp-matter SDK官方软件说明&#xff1a;ESP Matter Programming Guide官方参考文档&#xff1a;使用 Matter-SDK 快速搭建 Matter 环境 (Linux) 环境要求 Ubuntu 20.04 或 Ubuntu22.04网络环境支持访问 Gihub 在安装 esp-matter SDK 软件编译环境之前&a…

Maven详细配置整理

Maven的作用 在Javaweb开发中&#xff0c;需要使用大量的jar包&#xff0c;需要手动去导入&#xff0c;Maven能够自动帮我们导入和配置这个jar包。 对于新手Maven就是用来方便导入jar包的&#xff01; Maven的核心思想&#xff1a;约定大于配置 有约束&#xff0c;不要去违…

【远程通信系统】服务端初始化

服务器架构&#xff1a;libevent 线程池 数据库&#xff1a;MySQL 有两张表&#xff1a;chat_user和chat_group&#xff0c;分别保存用户信息和群信息 在线用户和群的保存&#xff1a; struct User {std::string name;//账号&#xff08;用户名struct bufferevent* bev;//客…

C++ 动态规划 状态压缩DP 最短Hamilton路径

给定一张 n 个点的带权无向图&#xff0c;点从 0∼n−1 标号&#xff0c;求起点 0 到终点 n−1 的最短 Hamilton 路径。 Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数 n 。 接下来 n 行每行 n 个整数&#xff0c;其中第 i 行…

网络基础(三)

网络层与数据链路层 1.网络层2.IP2.1 基本概念2.2 协议头格式2.3 网段划分2.4 特殊的IP地址2.5IP地址的数量限制2.6 私有IP地址和公网IP地址2.7 路由 3.数据链路层4.以太网&#xff08;MAC帧协议&#xff09;4.1 认识以太网4.2 以太网帧格式4.3 认识MAC地址4.4 对比理解MAC地址…

51 -25 Scene as Occupancy 3D占用作为场景表示 论文精读

本文阅读的文章是Scene as Occupancy&#xff0c;介绍了一种将物体表示为3D occupancy的新方法&#xff0c;以描述三维场景&#xff0c;并用于检测、分割和规划。 文章提出了OccNet和OpenOcc两个核心概念。 OccNet 3D占用网络是一种以多视图视觉为中心的方法&#xff0c;通过…

14.0 Zookeeper环球锁实现原理

全局锁是控制全局系统之间同步访问共享资源的一种方式。 下面介绍zookeeper如何实现全民锁&#xff0c;讲解他锁和共享锁两类全民锁。 排他锁 排他锁&#xff08;Exclusive Locks&#xff09;&#xff0c;又被称为写锁或独占锁&#xff0c;如果事务T1对数据对象O1加上排他锁…

#免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程

Mac电脑苹果芯片读写NTFS硬盘bash脚本 &#xff08;ntfs.sh脚本内容在本文最后面&#xff09; ntfs.sh脚本可以将Mac系统(苹果M系芯片)上的NTFS硬盘改成可读写的挂载方式&#xff0c;从而可以直接往NTFS硬盘写入数据。此脚本免费&#xff0c;使用过程中无需下载任何收费软件。…

C#在既有数组中插入另一个数组:Array.Copy方法 vs 自定义插入方法

目录 一、使用的方法 1.使用Array.Copy方法 2.Copy(Array, Int32, Array, Int32, Int32) 3. 使用自定义的方法 二、实例 1.示例1&#xff1a;使用Array.Copy方法 2.示例2&#xff1a;使用自定义的方法 一、使用的方法 1.使用Array.Copy方法 首先定义了一个名为InsertAr…