DFS深度优先搜索(前序、中序、后序遍历)非递归标准模板(JAVA)
本文展示了DFS深度优先搜索下,前中后序遍历模板;如果要使用前序遍历,可注释掉中后序遍历的输出代码;使用中序与后序遍历同理
TreeNode类
代码如下
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val){
this.val = val;
}
public TreeNode(TreeNode left, int val, TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
public String toString(){
return String.valueOf(this.val);
}
}
测试类
测试类使用到的树形
[1, 2, 3, 4, null, 5, 6]
代码
import java.util.LinkedList;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
TreeNode root = new TreeNode(new TreeNode(new TreeNode(4), 2, null),
1,
new TreeNode(new TreeNode(5), 3, new TreeNode(6))
);
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
TreeNode pop = null;
while(cur != null || !stack.isEmpty()){
if(cur != null){
stack.push(cur);
System.out.println("前序遍历:"+ cur);
cur = cur.left;
}else{
TreeNode peek = stack.peek();
if(peek.right == null){
System.out.println("中序遍历:"+ peek);
pop = stack.pop();
System.out.println("后序遍历:"+ pop);
}
else if(peek.right == pop){
pop = stack.pop();
System.out.println("后序遍历:"+ pop);
}
else{
System.out.println("中序遍历:"+ peek);
cur = peek.right;
}
}
}
}
}
希望有所帮助!