二叉树先序,中序,后序,层次遍历(数据结构)

先序遍历

先序遍历可以想象为,一个小人从一棵二叉树的根节点为起点,沿着二叉树的外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果
在这里插入图片描述

在这里插入图片描述先序遍历的结果为:A B D H I E J C F K G

中序遍历

中序遍历可以看成,二叉树每个节点,垂直方向投影下来(可以理解为每个节点从最左边开始垂直掉到地上),然后从左往右数,得出的结果便是中序遍历的结果
在这里插入图片描述中序遍历的结果是:H D I B E J A F K C G

后序遍历

后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。就是围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄)(也就是葡萄要一个一个掉下来,不能一口气掉超过1个这样),就把它剪下来,组成的就是后序遍历了
在这里插入图片描述
后序遍历的结果是:H I D J E B K F G C A

层次遍历

层次遍历就是从根节点开始,一层一层,从上到下,每层从左到右,依次写值就可以
在这里插入图片描述层次遍历的结果是:A B C D E F G H I J K

解释跑外圈的意思:

绕着外围跑一整圈的真正含义是:遍历所有节点时,都先往左孩子走,再往右孩子走

口诀:
先序遍历:先根,再左,再右
中序遍历:先左,再根,再右
后序遍历:先左,再右,再根
(这里的根,指的是每个分叉子树的根节点,并不只是最开始头顶的根节点,需要灵活思考理解)

代码展示:

#include<stdio.h>
#include<stdlib.h>typrdef struct Tree{int data;//存放数据域 struct Tree *lchild;//遍历左子树指针 struct Tree *rchild;//遍历右子树指针 
}Tree,*BitTree;BitTree CreateLink()
{int data;int temp;BitTree T;scanf("%d",&data);//输入数据 temp=getchar();//吸收空格if(data==-1){return NULL;//输入-1代表此节点下子树不存数据,也就是不继续递归创建		 }else{T=(BitTree)malloc(sizeof(Tree));//分配内存空间 T->data=data;//把当前输入的数据存入当前节点指针的数据域中 printf("请输入%d的左子树:",data);T->lchild=CreateLink();//开始递归创建左子树 printf("请输入%d的右子树:",data);T->rchild=CreateLink();//开始到上一级节点的右边递归创建左右子树 return T;//返回根节点 } 
}//先序遍历 
void ShowXianXu(BitTree T)//先序遍历二叉树 
{if(T==NULL) return;//递归中遇到NULL,返回上一层节点 printf("%d ",T->data);ShowXianXu(T->lchild);//递归遍历左子树 ShowXianXu(T->rchild);//递归遍历右子树 
}//中序遍历
void ShowZhongXu(BitTree T)
{if(T==NULL) return;//递归中遇到NULL,返回上一层节点 ShowZhongXu(T->lchild);//递归遍历左子树printf("%d ",T->data);ShowZhongXu(T->rchild);//递归遍历右子树
}//后序遍历
void ShowHouXu(BitTree T)
{if(T==NULL) return;//递归中遇到NULL,返回上一层节点ShowHouXu(T->lchild);//递归遍历左子树 ShowHouXu(T->rchild);//递归遍历右子树 printf("%d ",T->data);
}int main()
{BitTree S;printf("请输入第一个节点的数据:\n");S = CreateLink();//接受创建二叉树完成的根节点 printf("先序遍历结果: \n");ShowXianXu(S);//先序遍历二叉树 printf("\n中序遍历结果: \n");ShowZhongXu(S);//中序遍历二叉树 printf("\n后序遍历结果: \n");ShowHouXu(S);//后序遍历二叉树 return 0;	
}

树结点定义:

typedef struct TNode *Position;
typedef Position BinTree;//二叉树类型
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};

先序遍历:

  • 先访问根节点
  • 先序遍历其左子树
  • 先序遍历其右子树
void PreorderTraversal(BinTree BT)
{if(BT){printf("%d",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right);}
}

中序遍历:

  • 先序遍历其左子树
  • 先访问根节点
  • 先序遍历其右子树
void InorderTraversal(BinTree BT)
{if(BT){InorderTraversal(BT->Left);printf("%d",BT->Data);InorderTraversal(BT->Right);}
}

后序遍历:

  • 先序遍历其左子树
  • 先序遍历其右子树
  • 先访问根节点
void PostorderTraversal(BinTree BT)
{if(BT){PostorderTraversal(BT->Left);PostorderTraversal(BT->Right);printf("%d",BT->Data);}
}

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

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

相关文章

.NET Core 在 K8S 上的开发实践--学习笔记

摘要本主题受众是架构师&#xff0c;开发人员&#xff0c;互联网企业 IT 运维人员。大纲&#xff1a;1、 K8S 对应用的要求&#xff1b;2、 .NET Core 上 K8S 的优势&#xff1b;3、 K8S 下的 .NET Core 配置&#xff1b;4、 .NET Core 上分布式组件概览。大纲kubernetes 对应用…

.NetCore 3.1 安装本地化中文智能提示

A、平时在群里&#xff0c;很多小伙伴都会问&#xff0c;.net core的智能提示和注释都是英文的&#xff0c;如果英语水平不是很高的&#xff0c;看着是挺麻烦&#xff0c;所以经常需要在身边有一个翻译软件&#xff0c;如果有汉化的中文智能提示就好了&#xff08;当然&#xf…

asp.net core 3.x Endpoint终结点路由1-基本介绍和使用

前言我是从.net 4.5直接跳到.net core 3.x的&#xff0c;感觉asp.net这套东西最初是从4.5中的owin形成的。目前官方文档重点是讲路由&#xff0c;没有特别说明与传统路由的区别&#xff0c;本篇主要介绍终结点路由的相关概念和如何使用&#xff0c;不会详细介绍路由&#xff0c…

共享后缀的链表

有一种存储英文单词的方法&#xff0c;是把单词的所有字母串在一个单链表上。为了节省一点空间&#xff0c;如果有两个单词有同样的后缀&#xff0c;就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。 函数接口定义&…

C#反射与特性(一):反射基础

1. 说明1.1 关于反射、特性在 《C# 7.0 本质论》中&#xff0c;关于这方面的知识在 《第十八章 反射、特性和动态编程》&#xff1b;在《C# 7.0 核心技术指南》中&#xff0c;这部分内容在《第19章 反射和元数据》。[图片来自 《C# 7.0 本质论》]在这里我们可以获得一些关联性很…

收藏!推荐12个超实用的Visual Studio插件

工欲善其事&#xff0c;必先利其器,整理的一些我必装的12款Visual Studio插件&#xff0c;希望你们能get到。效率工具前文传送门&#xff1a;推荐&#xff1a;程序员必装的10款谷歌插件程序员必备的8个学习工具99%的人不知道搜索引擎的6个技巧01 CodeMaidCodeMaid快速整理代码文…

搭建独立博客,这款评论插件不能错过

微信公众号因为申请的时间晚&#xff0c;一直到现在都无法开通评论功能&#xff0c;之前博客一直使用的多说作为评论系统&#xff0c;自从多说关闭后&#xff0c;好多年都处于无评论状态&#xff0c;最近发现 gitalk 还不错&#xff0c;所以在博客中进行了对 gitalk 的集成&…

最大堆和最小堆(数据结构)

堆和栈的区别&#xff1a; 一、空间分配区别&#xff1a; 栈&#xff08;操作系统&#xff09;&#xff1a;由操作系统自动分配释放&#xff0c;存放函数的参考值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈堆&#xff08;操作系统&#xff09;&#xff1a;一…

2019公众号总结之——Top100 技术文章汇总

大家好&#xff0c;我是张善友。新年伊始&#xff0c;我们在欢送10年代的同时迎来了20年代。在这个崭新的时代&#xff0c;感谢各位朋友一直关注“dotnet跨平台”。一晃5年有余&#xff0c;关注公众号的粉丝6万&#xff0c;相对于.NET开发人员&#xff0c;希望2020年有更多小伙…

树,森林,二叉树的互相转换

树、森林到二叉树的转换 将树转换为二叉树 树中每个结点最多只有一个最左边的孩子&#xff08;长子&#xff09;和一个右邻的兄弟。按照这种关系很自然地就将树转换成相应的二叉树&#xff1a; 在所有兄弟结点之间加一连线对每个结点&#xff0c;除了保留与其长子的连线外&am…

数据丢失引起宕机怎么办?

做过系统开发和运维的朋友&#xff0c;应该最怕数据丢失问题出现&#xff0c;更严重的是造成无法恢复的糟糕境地&#xff0c;简直叫人崩溃啊&#xff0c;这周有一个朋友跟我咨询这方面的事情&#xff0c;就整理了一下数据库自动异地备份的方法&#xff0c;分享给大家。大家都知…

ASP.NET Core跨平台技术内幕

ASP.NET Core设计初衷是开源跨平台、高性能Web服务器&#xff0c;其中跨平台特性较早期ASP.NET是一个显著的飞跃&#xff0c;.NET现可以理直气壮与JAVA同台竞技&#xff0c;而ASP.NET Core的高性能特性更是成为致胜法宝。ASP.NET Core 2.1为IIS托管新增In-Process模型并作为默认…

使用 Visual Studio Code 进行远程开发

在完成了 AT 指令入门的学习之后&#xff0c;接下来就要使用 AT 指令进行 Socket 通信了。问题在于&#xff0c;之前 .NET 的 Socket 编程只需一台电脑便可进行学习&#xff0c;服务器和客户端都可以在本机运行&#xff0c;也可以分别运行在局域网上的两台电脑之上。而 NB-IOT …

.NETCore3.1中的Json互操作最全解读-收藏级

前言本文比较长&#xff0c;我建议大家先点赞、收藏后慢慢阅读&#xff0c;点赞再看&#xff0c;形成习惯&#xff01;我很高兴,.NETCore终于来到了3.1LTS版本&#xff0c;并且将支持3年&#xff0c;我们也准备让部分业务迁移到3.1上面&#xff0c;不过很快我们就遇到了新的问题…

逻辑结构的四种基本关系

逻辑结构的四种基本关系 1集合结构&#xff1a;数据元素之间除了“属于同一集合”的关系外&#xff0c;没有其他关系 2线性结构&#xff1a;数据元素之间存在一对一的关系 3树结构&#xff1a;数据元素之间存在一对多的关系 4图结构&#xff1a;数据元素之间存在多对多的关系

轻量级开源小程序SDK发车啦

Magicodes.WxMiniProgram.Sdk轻量级微信小程序SDK&#xff0c;支持.NET Framework以及.NET Core。目前已提供Abp模块的封装&#xff0c;支持开箱即用。地址&#xff1a;https://github.com/xin-lai/Magicodes.WxMiniProgram.SdkNuget新的包主要功能轻量级微信小程序SDK&#xf…

考察对顺序表的理解

顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中&#xff0c;即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻…

2020年你应该学习 .Net Core

一、什么是.NET Core.NET Core是一个开源通用的开发框架&#xff0c;支持跨平台&#xff0c;即支持在Window&#xff0c;macOS&#xff0c;Linux等系统上的开发和部署&#xff0c;并且可以在硬件设备&#xff0c;云服务&#xff0c;和嵌入式/物联网方案中进行使用。.NET Core的…

对表头指针、表头结点,单链表删除的理解

https://blog.csdn.net/weixin_46678290/article/details/105309156

C# WPF发票打印

C# WPF发票打印内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果发票界面PDF打印结果2.业务场景界面作为发票预览&#xff0c;按客户需求可打印成发票纸张给客户。3.编码实现3.1 添加Nuget库站长使用 .Net Core 3.1 创建的WPF工程&#xff0c;创建“Invoice”解决方…