有苦有乐的算法 --- 用栈和递归的方式实现二叉树的前序遍历、中序遍历、后序遍历
前序遍历
递归方式:
public static void pre(Node head) {if (head == null) {return;}System.out.println(head.value);pre(head.left);pre(head.right);
}
栈的方式:
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();
}
中序遍历
递归方式:
public static void in(Node head) {if (head == null) {return;}in(head.left);System.out.println(head.value);in(head.right);
}
栈的方式:
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();
}
后续遍历
递归方式:
public static void pos(Node head) {if (head == null) {return;}pos(head.left);pos(head.right);System.out.println(head.value);
}
栈的方式:
public static void pos(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();
}
有苦有乐的算法 --- 用栈和递归的方式实现二叉树的前序遍历、中序遍历、后序遍历相关推荐
- 有苦有乐的算法 --- 使用栈结构实现队列结构
题目 栈实现队列 解析 两个栈,stack1,stack2 假如一组元素为[1,2,3,4,5], 先依次入stack1 在将stack1的所有数据出栈,在入stack2 注:stack1里的的数据一 ...
- LeetCode--144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)
二叉树的前序.中序.后序.层序遍历(递归,迭代,栈,队列) 1. 二叉树的前序遍历 1.1 题目描述 1.2 题目分析 1.3 Python实现 2. 二叉树的中序遍历 2.1 题目描述 2.2 题目 ...
- 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件: ⑴有且仅有一个结点没有前驱 ...
- 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...
[树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...
- 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)
1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...
- 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)
本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...
- 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构
本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...
最新文章
- 第一本用机器生成的书籍由施普林格•自然出版
- Windows API实现窗口居中
- java cell报错_有一个小小点问题,现在我想从eclipse上读取Excel表
- 荷兰服务器适用于哪些用户?
- 06_Dart异常处理
- 引领三消新模式 《梦幻花园》商业化分析
- REST 之 Spring 4 RESTful service
- 仅信用卡大小,性能比TX2强15倍,英伟达边缘AI计算新品Jetson Xavier NX
- 【hortonworks/registries】registries curator LeaderLatch: getChildren() failed. rc = -6 Xid 110
- nginx启动重启与升级以及检测配置文件
- 删除后别人的微信号变成wxid_安卓版微信更新了,微信号终于可以修改了?
- 万年历单片机课程设计百度文库_单片机课程设计-万年历
- 什么是企业能源管理系统,包括哪些功能?
- 合并txt文件的几个方法
- wx小程序 解决子组件样式不起效
- BMS锂电池管理系统如何增加蓝牙模块芯片
- 此计算机上的操作系统或service pack,win10系统安装补丁失败提示缺少service pack系统组件的设置办法...
- Xcode与C++之游戏开发: 游戏对象
- 数据的表示和运算,进制转换,BCD码,奇偶校验码,海明校验码,循环冗余码
- 能够将图片转化为文字的简便操作软件有什么?
热门文章
- Linux系统和Windows系统打开文件方式
- 手写数字识别——KNN算法的应用
- 财务投资者和战略投资者有什么分别
- Semantic Segmentation--SegNet:A Deep Convolutional Encoder-Decoder Architecture..论文解读
- 2019-7-2-WPF-通过-ReadyToRun-提升性能
- Windows11配置JDK1.8
- podman开机自启
- 电脑微信linux安装程序,Ubuntu安装Linux网页版微信
- sqlitebrowser
- Chrome 70 将继续在地址栏隐藏网址中的 WWW