使用递归方式进行二叉树的前中后序遍历
function.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;//树的链式存储结构--创建一个完全二叉树
//层次建树必须要用队列
typedef struct BiTiNode {ElemType data;//数据域struct BiTiNode* lchild, * rchild;//左右孩子指针
}BiTiNode, *BiTree;//队列(用于辅助层次建树)
typedef struct tag {BiTree p;//存放树的某个结点的地址值struct tag* pnext;//pnext指针,指向下一个结点
}tag_t,*ptag_t;
main.cpp
#include "function.h"//通过递归实现二叉树的遍历
//前序遍历
void preOrder(BiTree T) {if (T != NULL){putchar(T->data);//相当于visit()函数preOrder(T->lchild);preOrder(T->rchild);}
}
//中序遍历
void inOrder(BiTree T)
{if (T != NULL) {inOrder(T->lchild);putchar(T->data);//相当于visit()函数inOrder(T->rchild);}
}
//后序遍历
void postOrder(BiTree T) {if (T != NULL) {postOrder(T->lchild);postOrder(T->rchild);putchar(T->data);//相当于visit()函数}
}int main() {BiTree pnew;//临时存放char c;BiTree tree = NULL;//树根ptag_t phead=NULL,ptail = NULL, listpnew = NULL, pcur = NULL;//phead就是队列头,ptail就是队列尾while (scanf("%c",&c)!=EOF){if (c == '\n'){break;}pnew = (BiTree)malloc(1 * sizeof(BiTiNode));pnew->lchild = NULL;//一开始先将树根的左右孩子设为Nullpnew->rchild = NULL;pnew->data = c;//存入数据listpnew = (ptag_t)malloc(1 * sizeof(tag_t));//给队列结点申请空间listpnew->p = pnew;//存放在队列里的是树每个结点对应的地址if (tree==NULL)//根节点{tree = pnew;//树的根phead = listpnew;//将phead指向队列头ptail = listpnew;//将ptail指向队列尾pcur = listpnew;continue;//直接跳出}else{ptail->pnext = listpnew;ptail = listpnew;//入队,队尾指针后移}if (pcur->p->lchild==NULL){pcur->p->lchild = pnew;//把新结点放到要插入结点的左边}else if (pcur->p->rchild==NULL){pcur->p->rchild = pnew;//把新结点放到要插入结点的右边pcur = pcur->pnext;//左右都放了结点后,pcur指向队列的下一个} }//按前序遍历输出树的结点printf("--------前序遍历----------\n");//也叫先序遍历,先打印当前结点,打印左孩子,打印右孩子preOrder(tree);//按中序遍历输出树的结点printf("\n--------中序遍历------------\n");//先打印左孩子,打印父亲,打印右孩子inOrder(tree);//按后序遍历输出树的结点printf("\n--------后序遍历------------\n");//先打印左孩子,打印右孩子,最后打印父亲postOrder(tree);
};
使用递归方式进行二叉树的前中后序遍历相关推荐
- 二叉树的前,中,后序遍历(思路分析) [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.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...
- 二叉树的前中后序遍历(考试常考)
二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根). 由于树是通过 ...
- Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)
目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...
- 【Java数据结构】二叉树的前中后序遍历(递归和非递归)
二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...
- 二叉树的前中后序遍历之迭代法(统一风格迭代方式)
一.前序遍历(迭代法)->右左中 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子. 为什么要先加入 右孩子,再加入左孩子呢?因为这样出栈的时候 ...
- 【数据结构】二叉树的前中后序遍历
二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...
最新文章
- 29个你必须知道的Linux命令
- keil中使用Astyle格式化你的代码的方法-keil4 keil5通用
- 启明云端分享|盘一盘ESP32为啥那么惹人爱呢?
- 使用WTMPlus快速搭建发卡网
- Python之字符串转换为日期、结合时区的日期操作
- 计算机数学基础 刘树利,计算机数学基础课件教学课件作者刘树利11课件.ppt
- Flink : Cannot find compatible factory for specified execution.target (=local)
- Swift - 控制流/控制结构说明(if,switch,for,while)
- 梯度边缘检测 matlab,梯度边缘检测matlab
- 页面三个txt加载联动省市县的代码,类似淘宝的收货地址的布局
- ADF12C UI根据row重定位VO的当前行
- 组态王与Modbus协议的地址对应规则
- Android - View 和 ViewGroup
- 【编程书籍】《The Nature of Code》笔记 -《代码本色》2.力 5.物理函数库
- phython编写图形界面
- GRDDC2020数据集下载及介绍
- 卡巴斯基实验室:2019Q1 IT威胁发展趋势统计报告
- Winter(Sleep)Camp2016酱油鸡
- 链表OJ题---Java实现
- 排序算法稳定性和不稳定性的理解
热门文章
- KAIST 电子工程系半导体实验室ISSCC会议发表的文章(Deep-Learning Processor)
- 实验11 B样条曲面生成
- postgresql 窗口函数
- 关于威联通升级5.0系统无法登录的解决办法(有用)
- 一张图看懂Resnet50与Resnet101算法
- bios sgx需要开启吗_Win10改Win7,UEFI改Legacy 启动,修改BIOS大全
- 编译工具链和交叉编译工具链简易说明
- oracle sqlplus命令登录数据库
- json文件下载--防止chrome直接打开方案
- 爬虫 推送到discord_如何将自定义表情符号添加到Discord服务器