算法-二叉树遍历
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
链接
最新文章
存档
- 2025年4月(17)
- 2025年3月(25)
- 2025年2月(20)
- 2025年1月(2)
- 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月(11)
- 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
如果速度增加接近光速、等于光速、甚至大于...
最新微语
- 在每件事情上花费的东西,就是生命的一部分,而我们花费的这些东西要求立即得到回报,或者在一个长时间以后得到回报。
2025-01-23 15:46
- 诺曼·文森特说:“并不是你认为自己是什么样的人,你就是什么样的人。但是你的思想是什么样,你就是什么样的人。”
2025-01-23 15:44
- 从今天起,做一个幸福的人。喂马,砍柴,(思想)周游世界
2022-03-21 23:31
- 2022.03.02 23:37:59
2022-03-02 23:38
- 几近崩溃后,找到解决方法,总是那么豁然开朗!所以遇到问题要坚持!
2018-07-18 10:49

发表评论: