二叉数先序,中序,后序排列(递归与非递归)
先序,中序,后序排列
前序遍历:根结点 ---> 左子树 ---> 右子树
中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
上图树的三种遍历:
前序:A B D E C F
中序:D B E A C F
后序:D E B F C A
代码实现(递归)
//先序
public static void pre(Node head) {if (head == null) {return;}System.out.println(head.value);pre(head.left);pre(head.right);}
//中序public static void in(Node head) {if (head == null) {return;}in(head.left);System.out.println(head.value);in(head.right);}
//后序public static void pos(Node head) {if (head == null) {return;}pos(head.left);pos(head.right);System.out.println(head.value);}
非递归
//先序public static void pre(Node head) {System.out.print("pre-order: ");if (head != null) {Stack<Node> stack = new Stack<Node>();stack.add(head);while (!stack.isEmpty()) {head = stack.pop();System.out.print(head.value + " ");if (head.right != null) {stack.push(head.right);}if (head.left != null) {stack.push(head.left);}}}System.out.println();}
后序思路:先序是头左右,所以在代码里面是先右孩子再左孩子进栈,把他变成先左孩子再右孩子进栈,就变成了头右左,再把这个栈s1弹出到栈s2,这个栈s2就变成了左右头
public static void pos2(Node h) {System.out.print("pos-order: ");if (h != null) {Stack<Node> stack = new Stack<Node>();stack.push(h);Node c = null;while (!stack.isEmpty()) {c = stack.peek();if (c.left != null && h != c.left && h != c.right) {stack.push(c.left);} else if (c.right != null && h != c.right) {stack.push(c.right);} else {System.out.print(stack.pop().value + " ");h = c;}}}System.out.println();}
中序
public static void in(Node cur) {System.out.print("in-order: ");if (cur != null) {Stack<Node> stack = new Stack<Node>();while (!stack.isEmpty() || cur != null) {if (cur != null) {stack.push(cur);cur = cur.left;} else {cur = stack.pop();System.out.print(cur.value + " ");cur = cur.right;}}}System.out.println();}
二叉数先序,中序,后序排列(递归与非递归)相关推荐
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
- LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...
- c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...
点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...
- 二叉树的前序遍历,中序遍历,后序遍历-详解-配套例题
二叉树作为数据结构中一种简单而且重要的数据结构,他的存储结构和算法都相对比较简单,因此他也显得特别重要,因为很多问题都可以抽象为二叉树的问题. 在这里我们对于二叉树的基本概念不做详细介绍,我们这里主要 ...
- 二叉树、前序遍历、中序遍历、后序遍历
一.树 在谈二叉树前先谈下树和图的概念 树:不包含回路的连通无向图(树是一种简单的非线性结构) 树有着不包含回路这个特点,所以树就被赋予了很多特性 1.一棵树中任意两个结点有且仅有唯一的一条路径连通 ...
- 二叉树的二叉链表存储结构构建以及先序遍历
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 typedef int TElemTy ...
- 二叉树的遍历之先序遍历、中序遍历和后序遍历
例图: 1.先序遍历 先序遍历也叫做先跟遍历.前序遍历.先序遍历步骤为:访问根结点然后遍历左子树,最后遍历右子树.在遍历左.右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树.即根左右. 如上 ...
- 非递归先、中、后序遍历二叉树(C语言)
文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...
- 二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!
文章目录 二叉树的四种遍历方式 前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Leve ...
最新文章
- 06-hibernate注解-一对多单向外键关联
- GNN 系列(三):GraphSAGE
- 复旦大学自然语言处理实验室发布模型鲁棒性评测平台TextFlint
- ie浏览器怎样查看html,查看IE浏览器历史记录的方法
- 编写一个弹出式菜单的shell程序_分享一个有趣的shell脚本--实现抓阄程序
- 计算机网络上网时间,电脑怎么限制上网时间
- 科学计算机java算法实现,(Java)科学型计算器开发及实现.doc
- python 查询sqlserver 视图_SQL Server查看视图定义总结
- java如何添加自定义的图片_java代码将图片加上自定义水印 -4
- python django开发工具_Python和Django web开发工具pycharm介绍
- 计算机对民间音乐,《中国民间歌曲》
- Android8.0 HIDL绑定式和直通式区别
- 深入String 与StringBuffer详解那个更省资源
- 用c语言写易语言Linux库,C语言编写支持库教程
- 提供一个文档下载接口,用httpclient下载文件
- pdfplumber和pdfminer.six提取PDF中文本行内容及对应坐标
- 【CVPR2021】OCR文本检测MOST解读
- iphone13开箱验机全步骤
- AirPods pro 连接Macbook pro左耳无声音
- python代码写父亲节快乐图片_巧用代码制作动态图文图【父亲节】
热门文章
- WPF下载图片到计算机
- form.submit() 提交部分浏览器不管用
- 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
- html 输入框联动显示,js下拉选择框与输入框联动实现添加选中值到输入框的方法...
- kafka消费者--coordinate分析
- MAC必装软件之HomeBrew、HomeBrew-Cask
- python蓝桥杯从入门到~
- STM32 -SPI关于nss引脚
- 让你写工作总结不用愁,总结的方法套路大全
- 手游代理平台有哪些,有没有好的游戏平台推荐?推荐云诚盒子