对于节点的定义
class ListNode{
ListNode left;
ListNode right;
int val;
public ListNode(int value){
this.val=value;
}
}
广度优先遍历:
对于广度优先遍历,通过队列这个数据结构可以实现,如下图所示,上面的一行是每次循环队列中的元素,下面的一行是每次遍历的元素。
public void levelOrderTraversal(LsitNode node){
if(node==null){
System.out.print("empty tree");
return;
}
ArrayDeque<ListNode> deque = new ArrayDeque<ListNode>();
deque.add(node);
while(!deque.isEmpty()){
ListNode rnode = deque.remove();
System.out.print(rnode.val+" ");
if(rnode.left!=null){
deque.add(rnode.left);
}
if(rnode.right!=null){
deque.add(rnode.right);
}
}
}
深度优先遍历:上面一行是栈每次循环时保留的数据,每次读只能从最顶端pop()
public void depthTraversal(ListNode node){
if(node==null){
System.out.print("empty tree");
return;
}
Stack<ListNode> stack = new Stack<ListNode>();
stack.push(node);
while(!stack.isEmpty()){
ListNode rnode = stack.pop();
System.out.print(rnode.val);
if(rnode.right!=null){
stack.push(rnode.right);
}
if(rnode.left!=null){
stack.push(rnode.left);
}
}
}