一、二叉树先序遍历:头>左>右
1. 递归方式实现
//先序打印 头左右
public static void pre(Node head) {
if (head == null) return;
System.out.print(head.value + ", ");
pre(head.left);
pre(head.right);
}
二、 非递归方式实现
使用栈集合存储节点数据,完成非递归实现
1. 数据结构
二叉树
1.1 . 将根节点 1 压入站内,进入循环后将 1 弹出栈并打印输出,利用栈后入先出的规则将右树3压入栈底,再将左树节点2压入栈,
1.2 进入下一轮循环,将节点2弹出栈并输出打印,并将节点2 的子节点5和4压入栈(先右后左)
1.3 进入下一轮循环,将节点4弹出栈并输入打印,发现其左子树节点和右子树节点都没值,不做任何操作。
1.4 进入下一轮循环,将节点5弹出栈并输入打印,发现其左子树节点和右子树节点都没值,不做任何操作。
1.5 左数整体遍历完毕,这时候栈内只有右数节点3,将其弹出栈并获取其右树节点和左树节点压入栈。
1.6 后面逻辑和1.1至1.5一样循环。代码如下:
public static void pre(Node head) {
System.out.println("pre----------------");
//非空判断
if (head != null) {
// 定义一个栈集合
Stack<Node> stack = new Stack<>();
// 将根节点压入栈
stack.push(head);
//循环条件-栈内不为空的情况下继续循环
while (!stack.isEmpty()) {
//弹出一个node节点
head = stack.pop();
System.out.print(head.value + ", ");
//判断当前的节点的右节点是否有值,有值压入栈
if (head.right != null) {
stack.push(head.right);
}
//判断当前的节点的左节点是否有值,有值压入栈
if (head.left != null) {
stack.push(head.left);
}
}
}
}