二叉树遍历(前中后序遍历代码及注释)
对二叉树前中后序不理解的同学可以看看这个视频是我觉得目前讲的最清晰易懂的:
https://www.bilibili.com/video/BV1eT4y1N7tV?from=search&seid=16601365746333983298
我们将用递归的方式前中序的遍历出来下面的二叉树
这边代码的设定是如果左孩子或者右孩子为空的话则输入空格
接下来代码展示:
#include "stdio.h"
#include "stdlib.h"typedef struct bitnode{ //定义二叉树节点 char data; //节点的数据为字符 struct bitnode *lchild,*rchild; //每个节点都有左孩子右孩子
}bitnode,*bittree; void createbit(bittree *T) //创建二叉树
{char a; //以前序遍历的顺序输入 scanf("%c",&a); //输入节点参数 if(' '==a){ //如果收到的是空格 *T=NULL; //树为空或者没输入叶子结点为空格 }else{*T=(bitnode *)malloc(sizeof(bitnode)); //分配动态空间 (*T)->data=a; //目前节点的数据为a createbit(&(*T)->lchild); //递归左孩子 createbit(&(*T)->rchild); //递归右孩子 }
}void visit(char T,int level) //访问节点输出节点数据和深度
{printf("数据%c在第%d行\n",T,level);
}void qianxubianli(bittree T,int level) //前序遍历二叉树
{if(T) //如果树不为空 { visit(T->data,level); //访问头节点 qianxubianli(T->lchild,level+1); //递归左孩子 qianxubianli(T->rchild,level+1); //递归右孩子 }
}void zhongxubianli(bittree T,int level) //前序遍历二叉树
{if(T) //如果树不为空 { zhongxubianli(T->lchild,level+1); //递归左孩子 visit(T->data,level); //访问头节点 zhongxubianli(T->rchild,level+1); //递归右孩子 }
}void houxubianli(bittree T,int level) //前序遍历二叉树
{if(T) //如果树不为空 { houxubianli(T->lchild,level+1); //递归左孩子 houxubianli(T->rchild,level+1); //递归右孩子 visit(T->data,level); //访问头节点 }
}int main()
{int level=1; //第一个节点的深度行数从1开始 bittree T=NULL; //初始化二叉树为空; createbit(&T); //创建树插入节点及叶子 printf("前序遍历\n");qianxubianli(T,level); //前序遍历 printf("中序遍历\n");zhongxubianli(T,level); //中序遍历 printf("后序遍历\n");houxubianli(T,level); //后序遍历
}
输出结果:
二叉树遍历(前中后序遍历代码及注释)相关推荐
- 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]
二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...
- Java二叉树的前中后序遍历
Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...
- 数据结构之二叉树的前中后序遍历以及层序遍历
学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...
- 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)
二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...
- 【数据结构】二叉树的前中后序遍历
二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...
- 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)
文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...
- 二叉树的前中后序遍历(考试常考)
二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根). 由于树是通过 ...
- 二叉树的前中后序遍历之迭代法(统一风格迭代方式)
一.前序遍历(迭代法)->右左中 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子. 为什么要先加入 右孩子,再加入左孩子呢?因为这样出栈的时候 ...
- 【Java数据结构】二叉树的前中后序遍历(递归和非递归)
二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...
- (必背)二叉树的前中后序遍历(利用栈)
二叉树的前序遍历(利用栈) 1.首先将根节点压入栈 2.栈中的首元素出栈,然后先将其右节点压入栈中,再将栈中的左节点压入栈中(如果左右节点分别存在的话) 3.重复步骤2直到栈为空 class Solu ...
最新文章
- 索引,表增删改统计,加锁查具体情况(推荐)
- 国内唯一,阿里云挺进 Forrester 数据流分析报告“强劲表现者”象限
- MySQL单行函数分类
- 如何定期备份网站数据
- 百度搜索引擎优化指南3.0_深圳网站搜索引擎排名优化电话,百度优化排名费用_华阳网络...
- 通过实例学习编写需求文档 【转】
- requests第三方库在测试中的使用
- COGS 2507 零食店
- js格式化显示xml
- html边框双箭头,CSS常用样式之绘制双箭头代码示例
- 2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕
- 大学教师晋升正教授职称需要多久
- 刷脸支付免费领取保险全额赔付保安全
- android屏幕分辨率适配总结
- QT课程设计:基于QT的图像处理程序
- TPA3255 classD 音频功放快速设计
- 国际电话区号--各国或地区电话国际区号对照表
- css 风琴,玩一下纯 CSS 折腾的一个叫什么手拉风琴的图片展示效果
- 中国航空物流行业运行现状与总体布局规划报告2022版
- 张正友相机标定数学原理
热门文章
- python调用大漠插件、检测么_python调用大漠插件教程05字库
- 开源有限元程序AsFem
- prelu()的 tf 代码
- 一个比较好看的彩带飘飞和点击效果 canvas实现
- 计算机技术数据pci是什么,pci数据捕获和信号处理控制器_PCI 数据捕获和信号处理控制器是什么?...
- android 支付宝 6002,IOS支付宝支付出现6002问题的解决办法
- 设计模式(四)行为型之模板方法模式、策略模式、命令模式、责任链模式
- 使用selenium爬取东航余票
- 2018中国旅游统计年鉴
- IE 浏览器重置方法