虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
不小心被我误删了,我重新写一篇吧。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;
}
运行结果