二叉树的三种遍历方式
目录
1.二叉树的结构:
2.二叉树的前序遍历:
3.二叉树的中序遍历:
4.二叉树的后序遍历:
5.二叉树前、中、后序的代码实现:
前序遍历函数:
中序遍历函数:
后序遍历:
完整代码:
代码运行结果截图:
1.二叉树的结构:
每一个二叉树均可以分为三部分:1.根节点 2.左子树 3.右子树。
比如上图中的A的左右子树分别是B、C,而E的左右子树为NULL、NULL。通常我们把NULL省略。
2.二叉树的前序遍历:
又叫先根遍历,遍历顺序是根节点、左子树、右子树。
上图的前序遍历:A B D NULL NULL E NULL NULL C NULL NULL
省略NULL后:A B D E C
3.二叉树的中序遍历:
遍历顺序:左子树、根节点、右子树
上图的中序遍历:NULL D NULL B NULL E NULL A NULL C NULL
省略NULL后:D B E A C
4.二叉树的后序遍历:
遍历顺序:左子树、右子树、根节点
上图的中序遍历:NULL NULL D NULL NULL E B NULL NULL C A
省略NULL后:D E B C A
5.二叉树前、中、后序的代码实现:
前序遍历函数:
void prev_order(BTNode* root)//前序遍历
{if (root == NULL){printf("NULL");return;}printf("%c ", root->data);prev_order(root->left);prev_order(root->right);
}
中序遍历函数:
void on_order(BTNode* root)//中序遍历
{if (root == NULL){printf("NULL\n");return;}prev_order(root->left);printf("%c ", root->data);prev_order(root->right);
}
后序遍历:
void post_order(BTNode* root)//后序遍历
{if (root == NULL){printf(" NULL \n");return;}prev_order(root->left);prev_order(root->right);printf("%c ", root->data);
}
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef char BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;
BTNode* BuyNode(BTDataType x)//开辟空间存储变量
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}
void prev_order(BTNode* root)//前序遍历
{if (root == NULL){printf("NULL");return;}printf("%c ", root->data);prev_order(root->left);prev_order(root->right);
}
void on_order(BTNode* root)//中序遍历
{if (root == NULL){printf("NULL\n");return;}prev_order(root->left);printf("%c ", root->data);prev_order(root->right);
}
void post_order(BTNode* root)//后序遍历
{if (root == NULL){printf(" NULL \n");return;}prev_order(root->left);prev_order(root->right);printf("%c ", root->data);
}
int main(void)
{BTNode* n1 = BuyNode('A');BTNode* n2 = BuyNode('B');BTNode* n3 = BuyNode('C');BTNode* n4 = BuyNode('D');BTNode* n5 = BuyNode('E');n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;prev_order(n1);printf("\n");on_order(n1);printf("\n");post_order(n1);printf("\n");return 0;
}
代码运行结果截图:
二叉树的三种遍历方式相关推荐
- c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理
二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
二叉树的三种遍历方式(递归.非递归和Morris遍历) 原文:http://www.linuxidc.com/Linux/2015-08/122480.htm 二叉树遍历是二叉树的最基本的操作,其实现 ...
- 详解二叉树的三种遍历方式(递归、迭代、Morris算法)
详解二叉树的三种遍历方式(递归.迭代.Morris算法) 最重要的事情写在前面:遍历顺序不一定就是操作顺序!!! 递归解法 首先,一颗二叉树它的递归序列是一定的,导致其前中后序不同的原因只不过是访问节 ...
- 二叉树的三种遍历方式:前序遍历、中序遍历和后序遍历
二叉树的三种遍历方式:前序遍历.中序遍历和后序遍历 参考资料: 二叉树.前序遍历.中序遍历.后序遍历 - 蓝海人 - 博客园 (cnblogs.com) 二叉树 - LeetBook - 力扣(Lee ...
- c语言二叉树的遍历菜单系统,C语言二叉树的三种遍历方式的实现及原理
C语言二叉树的三种遍历方式的实现及原理 发布时间:2020-10-03 19:43:57 来源:脚本之家 阅读:63 作者:看雪. 二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个 ...
- python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)
树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...
- 二叉树的三种遍历方式:先序,中序,后序
二叉树遍历基础概念分析: 遍历:编写程序时,读取二叉树中内容的顺序(本人理解为此). 先序/中序/后序:二叉树的先序,中序,后序中的"先中后"是相对于"根"而言 ...
- 二叉树的三种遍历方式-前序遍历,中序遍历,后序遍历
二叉树的遍历 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问.访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容.节点内容加1). 遍历是二叉树上 ...
- 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)
数据结构(第六章) 树与二叉树 1. 树与二叉树的相互转换 2. 森林与二叉树的相互转换 3. 二叉树的遍历 3.1 层序遍历(广度优先遍历) 2. 深度优先遍历 3. 树转化为二叉树的遍历 将一颗 ...
最新文章
- SAP 电商云 Spartacus SSR Optimization Engine 几处 timeout 的执行顺序
- 力扣498. 对角线遍历
- python实验练习-图书管理系统(使用文件来实现)
- Hadoop之HDFS应用
- JavaScript 中的函数介绍
- php实现一个简单的购物网站
- python的sort()和sorted()的区别_Python 3中sort()和sorted()的区别和用法,Python3
- System.out和System.err的区别
- spring事件监听器系列一:应用
- Ubuntu 安装 gcc-4.9.3-64-gnu
- 通信-RS232、RS485、RS422
- 20220522Python3.10安装教程
- java 汉字转拼音_java汉字转拼音
- 发现一款好用的 java web报表工具
- 祛痘收缩毛孔的简单方法 - 健康程序员,至尚生活!
- 信用社考试计算机试题及答案,2016黑龙江省农村信用社考试题库-计算机试题及答案六...
- npm install 报错up to date, audited 1 package in 133msfound 0 vulnerabilities
- 基于铂电阻测温电路的设计
- Vue全家桶系列之Vuex(二)
- 成功就是日复一日那一点点小小努力的积累