【数据结构】二叉树的遍历
创始人
2024-04-13 05:28:16
0

目录

  • ☀️二叉树的构建
  • ☀️二叉树的遍历
    • 🌻前序遍历
    • 🌻中序遍历
    • 🌻后序遍历
  • ☀️完整代码展示


☀️二叉树的构建

便于理解二叉树的遍历,这里我们手动简单构建一个二叉树,当然,此处二叉树的构建并不是真正二叉树的构建方式,仅仅作为对本文所讲的二叉树遍历的一个参考。

代码如下:

typedef int BTDatatype;
typedef struct TreeNode
{BTDatatype data;struct TreeNode* left;struct TreeNode* right;
}BTNode;BTNode* BuyBTNode(BTDatatype x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}
int main()
{BTNode* n1 = BuyBTNode(1);BTNode* n2 = BuyBTNode(2);BTNode* n3 = BuyBTNode(3);BTNode* n4 = BuyBTNode(4);BTNode* n5 = BuyBTNode(5);BTNode* n6 = BuyBTNode(6);n1->left = n2;n2->left = n3;n1->right = n4;n4->left = n5;n4->right = n6;return 0;
}

所构建的二叉树图如下所示:
在这里插入图片描述

☀️二叉树的遍历

🌻前序遍历

前序遍历也称为先根遍历,依次访问二叉树的根节点、左子树、右子树。

对本文所构建的二叉树进行前序遍历的顺序为:

1 -> 2 -> 3 -> NULL -> NULL -> NULL -> 4 -> 5 -> NULL -> NULL -> 6 -> NULL -> NULL

代码如下:

void PrevOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}

结合本文所构建的二叉树运行的结果:
在这里插入图片描述


🌻中序遍历

中序遍历也称为中根遍历,依次访问二叉树的左子树、根节点、右子树。

对本文所构建的二叉树进行中序遍历的顺序为:

NULL -> 3 -> NULL -> 2 -> NULL -> 1 -> NULL -> 5 -> NULL -> 4 -> NULL -> 6 -> NULL

代码如下:

void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}

结合本文所构建的二叉树运行的结果:
在这里插入图片描述


🌻后序遍历

中序遍历也称为后根遍历,依次访问二叉树的左子树、右子树、根节点。

对本文所构建的二叉树进行后序遍历的顺序为:

NULL -> NULL -> 3 -> NULL -> 2 -> NULL -> NULL -> 5 -> NULL -> NULL -> 6 -> 4 -> 1

代码如下:

void PostOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}PostOrder(root->left);PostOrder(root->right);printf("%d ", root->data);
}

结合本文所构建的二叉树运行的结果:
在这里插入图片描述

☀️完整代码展示

#include 
#include 
typedef int BTDatatype;
typedef struct TreeNode
{BTDatatype data;struct TreeNode* left;struct TreeNode* right;
}BTNode;BTNode* BuyBTNode(BTDatatype x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}
//前序遍历
void PrevOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}
//中序遍历
void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}
//后序遍历
void PostOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}PostOrder(root->left);PostOrder(root->right);printf("%d ", root->data);
}
int main()
{BTNode* n1 = BuyBTNode(1);BTNode* n2 = BuyBTNode(2);BTNode* n3 = BuyBTNode(3);BTNode* n4 = BuyBTNode(4);BTNode* n5 = BuyBTNode(5);BTNode* n6 = BuyBTNode(6);n1->left = n2;n1->right = n4;n2->left = n3;n4->left = n5;n4->right = n6;//前序遍历PrevOrder(n1);printf("\n");//中序遍历InOrder(n1);printf("\n");//后序遍历PostOrder(n1);printf("\n");return 0;
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...