算法-二叉树遍历
package com.jiucaiyuan.net.algrithm.tree; import java.util.Stack; /** * 二叉树的遍历(前序、中序、后续遍历)递归+非递归 * * @Author jiucaiyuan 2022/4/9 22:16 * @mail services@jiucaiyuan.net */ public class PreInPostTraversal { /** * 先序遍历-非递归 */ public static void preOrderUnRecur(Node root) { System.out.print("pre-order:"); if (root != null) { Stack<Node> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { root = stack.pop(); System.out.print(root.value + " "); //注意:先压right,再压left if (root.right != null) { stack.push(root.right); } if (root.left != null) { stack.push(root.left); } } System.out.println(); } } /** * 中序遍历-非递归 * 处理过程:指定root节点的整棵树左边树进栈,弹出时打印,针对弹出节点右树重复该节点的左树进栈 */ public static void inOrderUnRecur(Node root) { System.out.print("in-order:"); if (root != null) { Stack<Node> stack = new Stack<>(); while (!stack.isEmpty() || root != null) { //不停的把左边树进栈 if (root != null) { stack.push(root); root = root.left; } else { //如果没有左树了,弹出,处理该节点的右子树(再次进入while时还是处理该节点的左边树进栈) root = stack.pop(); System.out.print(root.value + " "); root = root.right; } } System.out.println(); } } /** * 后序遍历-非递归 * 借助类似前序遍历搞定:准备两个栈,通过类似前序遍历时,该访问时不访问, * 直接加入辅助栈,所有的都处理完,再弹出辅助栈进行处理 */ public static void postOrderUnRecur(Node root) { System.out.print("post-order:"); if (root != null) { Stack<Node> stack = new Stack<>(); Stack<Node> help = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { root = stack.pop(); // System.out.print(root.value + " "); help.push(root); //注意:先压left,再压right if (root.left != null) { stack.push(root.left); } if (root.right != null) { stack.push(root.right); } } while (!help.isEmpty()) { System.out.print(help.pop().value + " "); } System.out.println(); } } /** * 后序遍历-非递归 */ public static void postOrderUnRecur2(Node root) { System.out.print("post-order:"); if (root != null) { Stack<Node> stack = new Stack<>(); stack.push(root); Node c = null; while (!stack.isEmpty()) { c = stack.peek(); if (c.left != null && root != c.left && root != c.right) { stack.push(c.left); } else if (c.right != null && root != c.right) { stack.push(c.right); } else { System.out.print(stack.pop().value + " "); root = c; } } System.out.println(); } } //------------------------------------------------ /** * 遍历序 * * @param root */ public static void f(Node root) { //1 if (root == null) { return; } //1 f(root.left); //2 //2 f(root.right); //3 //3 } /** * 先序遍历-递归 */ public static void preOrderRecur(Node root) { if (root == null) { return; } System.out.print(root.value + " "); preOrderRecur(root.left); preOrderRecur(root.right); } /** * 中序遍历-递归 */ public static void inOrderRecur(Node root) { if (root == null) { return; } inOrderRecur(root.left); System.out.print(root.value + " "); inOrderRecur(root.right); } /** * 后序遍历-递归 */ public static void postOrderRecur(Node root) { if (root == null) { return; } postOrderRecur(root.left); postOrderRecur(root.right); System.out.print(root.value + " "); } }
日历
个人资料
diaba 寻求合作请留言或联系mail: services@jiucaiyuan.net
链接
最新文章
存档
- 2024年10月(1)
- 2024年8月(2)
- 2024年6月(4)
- 2024年5月(1)
- 2023年7月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(11)
- 2022年5月(6)
- 2022年4月(33)
- 2022年3月(26)
- 2021年3月(1)
- 2020年9月(2)
- 2018年8月(1)
- 2018年3月(1)
- 2017年3月(3)
- 2017年2月(6)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(1)
- 2016年9月(3)
- 2016年8月(4)
- 2016年7月(3)
- 2016年6月(4)
- 2016年5月(7)
- 2016年4月(9)
- 2016年3月(4)
- 2016年2月(5)
- 2016年1月(17)
- 2015年12月(15)
- 2015年11月(12)
- 2015年10月(6)
- 2015年9月(11)
- 2015年8月(8)
分类
热门文章
- SpringMVC:Null ModelAndView returned to DispatcherServlet with name 'applicationContext': assuming HandlerAdapter completed request handling
- Mac-删除卸载GlobalProtect
- java.lang.SecurityException: JCE cannot authenticate the provider BC
- MyBatis-Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}
- Idea之支持lombok编译
标签
最新评论
- logisqykyk
Javassist分析、编辑和创建jav... - xxedgtb
Redis—常见参数配置 - 韭菜园 ... - wdgpjxydo
SpringMVC:Null Model... - rllzzwocp
Mysql存储引擎MyISAM和Inno... - dpkgmbfjh
SpringMVC:Null Model... - tzklbzpj
SpringMVC:Null Model... - bqwrhszmo
MyBatis-Improper inl... - 乐谱吧
good非常好 - diaba
@diaba:应该说是“时间的度量依据”... - diaba
如果速度增加接近光速、等于光速、甚至大于...
最新微语
- 从今天起,做一个幸福的人。喂马,砍柴,(思想)周游世界
2022-03-21 23:31
- 2022.03.02 23:37:59
2022-03-02 23:38
- 几近崩溃后,找到解决方法,总是那么豁然开朗!所以遇到问题要坚持!
2018-07-18 10:49
- 2018年关键字“走心”
2018-03-19 16:07
- 保护好自己最大的方法是让自己更强大,不要柔弱的像一只绵羊一样,得谁巴拉,就谁巴拉!
2017-12-20 10:24
发表评论: