首先放上递归的方式
private static class Node{
//树的数据结构
Integer data;
Node left;
Node right;
//有参构造器
public Node(Integer data) {
this.data = data;
}
//无参构造器,这里并未使用,但是养成好的习惯,尽量去构造。
public Node() {
}
}
private static void preOrder(Node node){
if (node == null){
return;
}
System.out.println(node.data);
preOrder(node.left);
preOrder(node.right);
}
//创建树
public static void main(String[] args) {
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
//递推前序遍历
preOrder.(root);
}
接下来是栈的方式
private static class Node{
//树的数据结构
Integer data;
Node left;
Node right;
//有参构造器
public Node(Integer data) {
this.data = data;
}
//无参构造器,这里并未使用,但是养成好的习惯,尽量去构造。
public Node() {
}
}
//使用栈来进行前序遍历
//这里调整了左右孩子的进栈顺序,而不是我们常说的根左右方式。
// 具体自己画图推断一下就可以得到结论
private static void pre(Node node){
Stack<Node> stack = new Stack<>();
stack.push(node);
while (!stack.isEmpty()){
node = stack.pop();
System.out.println(node.data);
if (node.right != null){
stack.push(node.right);
}
if (node.left!= null){
stack.push(node.left);
}
}
}
//创建树
public static void main(String[] args) {
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
//递推前序遍历
preOrder.(root);
}