三种排序方法都是先左再右,只是输出根结点的次序不同。
PS:队列的基本操作
//前序遍历-获取整个树中所有的键
public Queue<Key> preErgodic(){
Queue<Key> keys = new LinkedList<>();;
preErgodic(root, keys);
return keys;
}
//前序遍历-获取指定树x的所有键,并放到keys队列中
private void preErgodic(Node x, Queue<Key> keys){
if(x==null){
return;
}
//把x结点的key放入到keys中
keys.offer(x.key);
//递归遍历x结点的左子树
if(x.left!=null){
preErgodic(x.left, keys);
}
//递归遍历x结点的右子树
if(x.right!=null){
preErgodic(x.right, keys);
}
}
//中序遍历-获取整个树中所有的键
public Queue<Key> midErgodic(){
Queue<Key> keys = new LinkedList<>();
midErgodic(root, keys);
return keys;
}
//中序遍历-获取指定树x的所有键,并放到keys队列中
private void midErgodic(Node x, Queue<Key> keys){
if(x==null){
return;
}
//递归遍历x结点的左子树
if(x.left!=null){
midErgodic(x.left, keys);
}
//把x结点的key放入到keys中
keys.offer(x.key);
//递归遍历x结点的右子树
if(x.right!=null){
midErgodic(x.right, keys);
}
}
//后序遍历-获取整个树中所有的键
public Queue<Key> afterErgodic(){
Queue<Key> keys = new LinkedList<>();
afterErgodic(root, keys);
return keys;
}
//后序遍历-获取指定树x的所有键,并放到keys队列中
private void afterErgodic(Node x, Queue<Key> keys){
if(x==null){
return;
}
//递归遍历x结点的左子树
if(x.left!=null){
afterErgodic(x.left, keys);
}
if(x.right!=null){
afterErgodic(x.right, keys);
}
//把x结点的key放入到keys中
keys.offer(x.key);
//递归遍历x结点的右子树
}