首页 > 其他分享 >二叉树的三种遍历方式

二叉树的三种遍历方式

时间:2024-10-27 17:19:04浏览次数:3  
标签:遍历 前序 BTNode 三种 二叉树 root 中序

文章目录


前言

本文章讲解二叉树的三种遍历

前序遍历:先遍历根节点,然后是左节点,最后是右节点-----根左右
中序遍历:先遍历左节点,然后是根节点,最后是右节点-----左根右
后序遍历:先遍历左节点,然后是右节点,最后是根节点-----左右根
先创建一个二叉树
text.h

#pragma once
#define ElemType  char
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef struct BinaryTreeNode
{
	ElemType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;
//创建结点
BTNode* BuyNode(ElemType x);
//创建二叉树
BTNode* CreateTree();

//前序遍历
void PreOrder(BTNode* root);
//中序遍历
void InOrder(BTNode* root);
//后序遍历
void PostOrder(BTNode* root);

下图为一张最基本的二叉树
在这里插入图片描述
接下来将为大家讲解如何遍历。

一、前序遍历

1、理解前序遍历

该图为前序遍历运行结果:
在这里插入图片描述
我们看待前序遍历,可以牢牢根据口诀来理解根左右,A为根,红色部分为左,绿色部分为右。这样,在大体上就可以知道哪些元素在A的左边,哪些元素在A的右边。

在这里插入图片描述
然后依旧是根据口诀根左右,根有了(A),那么接下来就是处理左半部分,根为B,那么左边就是D,右边就是NULL。
因为D的下面已经没有元素可以遍历了,所以可以认为是整个二叉树最左边的部分,就可以回溯。
在这里插入图片描述
根和左半部分都处理完了,那么就剩下右半部分了,聪明的同学已经通过上面的规律看出来了,根为C,左为E,右为F。
在这里插入图片描述

2、前序遍历代码

//先序遍历--根左右
void PreOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%c ", root->data);
	PreOrder(root->left);
	PreOrder(root->right);
}

二、中序遍历

中序遍历代码

//中序遍历--左根右
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	InOrder(root->left);
	printf("%c ", root->data);
	InOrder(root->right);
}

三、后序遍历

后序遍历代码

//后序遍历--左右根
void PostOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	PostOrder(root->left);
	PostOrder(root->right);
	printf("%c ", root->data);
}

总结

二叉树的前中后遍历需要多次自己亲自过一遍,这样才能理解图片的进程和函数的递归之间的练习,以便早日在以后的过程中更加熟练地运用和扩展思维。

标签:遍历,前序,BTNode,三种,二叉树,root,中序
From: https://blog.csdn.net/q38491/article/details/143264504

相关文章

  • leetCode-深度优先遍历
    岛屿数量深度优先遍历classSolution{publicintnumIslands(char[][]grid){intxlen=grid[0].length;intylen=grid.length;intcount=0;for(intx=0;x<xlen;x++){for(inty=0;y<ylen;y++){......
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
    努力的意义大概就是当好运来临的时候你觉得你值得                                                ——24.10.24105.从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是......
  • 如何利用递归和迭代构建二叉树?详解题解
    文章目录根据二叉树创建字符串思路代码二叉树的层序遍历思路代码二叉树的最近公共祖先思路代码二叉搜索树与双向链表思路代码从前序与中序遍历序列构造二叉树思路代码总结根据二叉树创建字符串题目:样例:可以看见,唯一特殊的就是左子树,当右子树存在的时候左......
  • 【数据结构】树-二叉树-堆(上)
    ......
  • vsftp的三种用户详解
    vsfp上有三种用户类型:annoymous匿名用户local_user本地用户virtual_user虚拟用户1、使用匿名用户不需要认证主配置文件中配置:anonymous_enable=YES2、使用本地用户本地用户,就是linux上的系统用户,满足下面两点就可以使用。1、用户的bash是/bin/bash2、主配置文件......
  • Java实现二叉树
    一、树型结构1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。​层序遍历特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti......
  • 66openpyxl的遍历读写操作(常用于数据批量读出来和写进去)
     importopenpyxlfromopenpyxlimportWorkbook#常用于数据批量读出来和写进去#往表格写入操作defcreate_wb():#创建一个新的工作簿wb=Workbook()#选择默认的工作表ws=wb.active#假设这是你要写入的数据,4行4列data=[......
  • 遍历矩形的主对角线
    B.SakurakoandWater对于上三角遍历的顺序是我们举例n=3,m=3(1,1)(2,2)(3,3)(1,2)(2,3)(1,3)所以上三角可以这样遍历 //上三角 for(inti=1;i<=n;i++) { for(intj=1,k=i;k<=n;k++,j++);//todo //j对应每次的横坐标,k对应每次的纵坐标 } //下三角同理 for(inti=2;i<=n;i++)......
  • 在K8S中,kube-proxy 三种工作模式和原理是什么?
    在Kubernetes(K8s)中,kube-proxy是负责实现Service的网络代理和负载均衡功能的组件。它支持三种不同的工作模式,每种模式的工作原理和特点各不相同。以下是kube-proxy的三种工作模式和原理的详细解释:1.Userspace模式工作原理:kube-proxy监听KubernetesAPI服务器中Service和Endpo......
  • 代码随想录算法训练营第24天(补第13天)|226.翻转二叉树, 101. 对称二叉树,104.二叉树的最
    226.翻转二叉树文章链接:https://programmercarl.com/0226.翻转二叉树.html#算法公开课题目链接:https://leetcode.cn/problems/invert-binary-tree/description/迭代法:这里使用了前序遍历来交换左右孩子节点classSolution{public:TreeNode*invertTree(TreeNode*r......