前序遍历:根左右,第一次经过节点即打印,直到打印null,往回溯,打印右子树
定义一棵二叉树:
由于采用迭代方式进行遍历,所以在此利用栈(stack)的先进后出特点进行压栈存储节点值,然后再从栈中取出节点值。
具体实现代码
package com.hx;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Stack;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class BinaryTree {
/**
* 二叉树遍历-前序遍历迭代
* @param root
*/
public static void preorderByIteration(TreeNode root) {
if(null != root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.add(root);
while (!stack.isEmpty()) {
root = stack.pop(); //去除压入栈的节点值
if(root != null) {
System.out.println(root.val);
stack.push(root.right); //由于先进后出 所有先压入又节点
stack.push(root.left);
}
}
}
}
public static void main(String[] args) {
TreeNode node7 = new TreeNode(7,null, null);
TreeNode node6 = new TreeNode(6,null, null);
TreeNode node5 = new TreeNode(5,node6, node7);
TreeNode node4 = new TreeNode(4,null, null);
TreeNode node3 = new TreeNode(3,null, null);
TreeNode node2 = new TreeNode(2,node4, node5);
TreeNode node1 = new TreeNode(1,node2, node3);
preorderByIteration(node1);
}
}
执行结果