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);
};

使用递归方式进行二叉树的前中后序遍历相关推荐

  1. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  2. Java二叉树的前中后序遍历

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  3. 数据结构之二叉树的前中后序遍历以及层序遍历

    学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...

  4. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)

    文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...

  5. 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)

    二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...

  6. 二叉树的前中后序遍历(考试常考)

    二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根).         由于树是通过 ...

  7. Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)

    目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...

  8. 【Java数据结构】二叉树的前中后序遍历(递归和非递归)

    二叉树的遍历 递归做法 前序遍历 中序遍历 后序遍历 非递归 前序遍历 中序遍历 后序遍历 二叉树遍历是二叉树的一种重要操作 必须要掌握 二叉树的遍历可以用递归和非递归两种做法来实现 递归做法 前序遍 ...

  9. 二叉树的前中后序遍历之迭代法(统一风格迭代方式)

    一.前序遍历(迭代法)->右左中 前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子. 为什么要先加入 右孩子,再加入左孩子呢?因为这样出栈的时候 ...

  10. 【数据结构】二叉树的前中后序遍历

    二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...

最新文章

  1. 29个你必须知道的Linux命令
  2. keil中使用Astyle格式化你的代码的方法-keil4 keil5通用
  3. 启明云端分享|盘一盘ESP32为啥那么惹人爱呢?
  4. 使用WTMPlus快速搭建发卡网
  5. Python之字符串转换为日期、结合时区的日期操作
  6. 计算机数学基础 刘树利,计算机数学基础课件教学课件作者刘树利11课件.ppt
  7. Flink : Cannot find compatible factory for specified execution.target (=local)
  8. Swift - 控制流/控制结构说明(if,switch,for,while)
  9. 梯度边缘检测 matlab,梯度边缘检测matlab
  10. 页面三个txt加载联动省市县的代码,类似淘宝的收货地址的布局
  11. ADF12C UI根据row重定位VO的当前行
  12. 组态王与Modbus协议的地址对应规则
  13. Android - View 和 ViewGroup
  14. 【编程书籍】《The Nature of Code》笔记 -《代码本色》2.力 5.物理函数库
  15. phython编写图形界面
  16. GRDDC2020数据集下载及介绍
  17. 卡巴斯基实验室:2019Q1 IT威胁发展趋势统计报告
  18. Winter(Sleep)Camp2016酱油鸡
  19. 链表OJ题---Java实现
  20. 排序算法稳定性和不稳定性的理解

热门文章

  1. KAIST 电子工程系半导体实验室ISSCC会议发表的文章(Deep-Learning Processor)
  2. 实验11 B样条曲面生成
  3. postgresql 窗口函数
  4. 关于威联通升级5.0系统无法登录的解决办法(有用)
  5. 一张图看懂Resnet50与Resnet101算法
  6. bios sgx需要开启吗_Win10改Win7,UEFI改Legacy 启动,修改BIOS大全
  7. 编译工具链和交叉编译工具链简易说明
  8. oracle sqlplus命令登录数据库
  9. json文件下载--防止chrome直接打开方案
  10. 爬虫 推送到discord_如何将自定义表情符号添加到Discord服务器