之前只会树的前序,中序,后序遍历的递归实现。今天主要是总结非递归实现。
先把递归实现的前中后遍历写一遍,节点的定义就省略不写了。
//前序遍历
public static void preTraversal(Node root){
if(root!=null){
System.out.print(root.value+" ");
preTraversal(root.left);
preTraversal(root.right);
}
}
//中序遍历
public static void inTraversal(Node root){
if(root!=null){
inTraversal(root.left);
System.out.print(root.value+" ");
inTraversal(root.right);
}
}
//后序遍历
public static void lastTraversal(Node root){
if(root!=null){
lastTraversal(root.left);
lastTraversal(root.right);
System.out.print(root.value+" ");
}
}
树的递归遍历非常简单,主要介绍非递归遍历.(树的深度优先遍历分为先序,中序,后序三种)
非递归先序遍历
public static void iterativePreorder(Node root){
Stack<Node> stack = new Stack<Node>();
if(root!=null){
stack.push(root);
while(stack.size()!=null){
root = stack.pop();
System.out.print(root.value);
if(root.right!=null){
stack.push(root.right);
}
if(root.left!=null){
stack.push(root.left);
}
}
}
}
非递归中序遍历
继续更新