二叉树(搜索二叉树)的遍历
一、基础遍历(前、中、后 序遍历)
1、前序遍历,创建一个空队列,通过递归方法将遍历出的节点key值一个一个存储在队列中。
//获取二叉树前序遍历出的key值队列
public Queue<Key> getPreQueue(){
Queue<Key> keys = new Queue<Key>();
preErgodic(root,keys);
return keys;
}
//获取指定树中所有节点关键值,置于队列中(前序遍历)
private void preErgodic(Node node,Queue<Key> keys){
//如果传入节点为空,直接结束
if (node==null){
return;
}
keys.enqueue(node.key);
if (node.left!=null){
preErgodic(node.left,keys);
}
if (node.right!=null){
preErgodic(node.right,keys);
}
}
2、中序遍历:
//获取二叉树中序遍历出的key值队列
public Queue<Key> getMinQueue(){
Queue<Key> keys = new Queue<Key>();
midErgodic(root,keys);
return keys;
}
//获取指定树中所有节点关键值,置于队列中(中序遍历)
private void midErgodic(Node node,Queue<Key> keys){
//如果传入节点为空,直接结束
if (node==null){
return;
}
if (node.left!=null){
preErgodic(node.left,keys);
}
keys.enqueue(node.key);
if (node.right!=null){
preErgodic(node.right,keys);
}
}
3、后序遍历:
//获取二叉树后序遍历出的key值队列
public Queue<Key> getAfterQueue(){
Queue<Key> keys = new Queue<Key>();
afterErgodic(root,keys);
return keys;
}
//获取指定树中所有节点关键值,置于队列中(后序遍历)
private void afterErgodic(Node node,Queue<Key> keys){
//如果传入节点为空,直接结束
if (node==null){
return;
}
if (node.left!=null){
preErgodic(node.left,keys);
}
if (node.right!=null){
preErgodic(node.right,keys);
}
keys.enqueue(node.key);
}
二、层序遍历
//获取二叉树层序遍历出的key值队列
public Queue<Key> getLayerQueue(){
Queue<Key> keys = new Queue<Key>();
layerErgodic(root,keys);
return keys;
}
private void layerErgodic(Node node,Queue<Key> keys){
Queue<Node> queue = new Queue<>();
queue.enqueue(root);
while (queue.getSize()!=0){
Node n=queue.dequeue();
keys.enqueue(n.key);
if (n.left!=null){
queue.enqueue(n.left);
}
if (n.right!=null){
queue.enqueue(n.right);
}
}
}