二叉树的前序、中序、后序遍历

  虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!

  不小心被我误删了,我重新写一篇吧。emmm可能比原来的会简略一点。
①二叉树的前序遍历
  先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)。
  我觉得图解已经非常详细了,就不阐述自己的理解了。

在这里插入图片描述


先序遍历结果:A B D G H C E I F

②二叉树的中序遍历
  中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。

在这里插入图片描述


  我的理解:你把每一颗结点都向下投影,emmm大概就是这样。至于那些看起来好像在一根直线上的先投影哪个,那就是画图的问题了,比如D过后是H还是B,我只能告诉你,H跟D比较近,毕竟它们是小父子,BD是大父子,歪理也是理,不要刁难我,我只是一只菜鸡。

在这里插入图片描述


中序遍历结果:G D H B A E I C F

③二叉树的后序遍历
  后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。

在这里插入图片描述


  我的理解:总之先结点后根,从左子树到右子树就从最底下那个叶结点开始。

接下来是代码部分(建议复制后自己运行一下):

二叉堆的遍历.h
#pragma once
#include <stdio.h>

/*构建二叉树结点*/
typedef struct TreeNode
{
	char data;/*该结点的数据*/
	TreeNode *left;/*指向左边结点的指针*/
	TreeNode *right;/*指向右边结点的指针*/
}TreeNode;


/*前序遍历*/
void PreTraver(TreeNode *root);

/*中序遍历*/
void MidorTraver(TreeNode *root);

/*后序遍历*/
void LastTraver(TreeNode *root);

/*测试遍历函数*/
void TestTravel();
二叉堆的遍历.cpp
#include "二叉堆的遍历.h"
#include <iostream>
using namespace std;

/*前序遍历*/
void PreTraver(TreeNode *root)
{
	if (root != NULL)/*如果这个结点非空*/
	{
		cout << root->data << " ";/*打印这个结点的数值*/
		PreTraver(root->left);/*遍历它的左子树*/
		PreTraver(root->right);/*遍历它的右子树*/
	}
}

/*中序遍历*/
void MidorTraver(TreeNode *root)
{
	if (root != NULL)/*如果这个结点非空*/
	{
		MidorTraver(root->left);/*遍历它的左子树*/
		cout << root->data << " ";/*打印这个结点的数值*/
		MidorTraver(root->right);/*遍历它的右子树*/
	}
}

/*后序遍历*/
void LastTraver(TreeNode *root)
{
	if (root != NULL)/*如果这个结点非空*/
	{
		LastTraver(root->left);/*遍历它的左子树*/
		LastTraver(root->right);/*遍历它的右子树*/
		cout << root->data << " ";/*打印这个结点的数值*/
	}
}

/*测试遍历函数*/
void TestTravel()
{
	/*构建二叉树*/
	/*
	             A
	          B     C
	      D      E    F
	    G   H      I
	*/
	TreeNode binaryTree[9] =
	{
	{ 'A',&binaryTree[1],&binaryTree[2] },
	{ 'B',&binaryTree[3],NULL },
	{ 'C',&binaryTree[4],&binaryTree[5] },
	{ 'D',&binaryTree[6],&binaryTree[7] },
	{ 'E',NULL,&binaryTree[8] },
	{ 'F',NULL,NULL },
	{ 'G',NULL,NULL },
	{ 'H',NULL,NULL },
	{ 'I',NULL,NULL }
	};
	cout << "前序遍历结果:";
	PreTraver(binaryTree);
	cout << endl;
	cout << "中序遍历结果:";
	MidorTraver(binaryTree);
	cout << endl;
	cout << "后序遍历结果:";
	LastTraver(binaryTree);
}
主函数
#include <stdio.h>
#include "二叉堆的遍历.h"

int main()
{
	TestTravel();
	getchar();
	return 0;
}
运行结果

在这里插入图片描述

参考网站以及博客:
百度百科
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值