二分搜索树的前序遍历
- 先访问这个节点,再访问这个节点的左子树,最后访问这个节点的右子树;访问这个节点先于访问它的左右子树,所谓前序遍历;
- 前序遍历BST可以转化成一个递归问题:前序遍历以node为根的BST;
- 规模更小的同一个问题是:先前序遍历node的左子树,再前序遍历node的右子树;
- 不能再缩小的基本问题是:对根节点的处理,由于问题只是遍历,考虑的情况相对较少,只需判断一个node是否为空即可;
- 如果node == null,什么都不做;
- 如果node != null,把node遍历到就行了;
// 二分搜索树的前序遍历
public void preOrder(){
preOrder(root);
}
// 前序遍历以node为根的二分搜索树, 递归算法
private void preOrder(Node node){
if(node == null)
return;
System.out.println(node.e);
preOrder(node.left);
preOrder(node.right);
}
测试代码
public class Main {
public static void main(String[] args) {
BST<Integer> bst = new BST<>();
int[] nums = {5, 3, 6, 8, 4, 2};
for(int num: nums)
bst.add(num);
/
// 5 //
// / \ //
// 3 6 //
// / \ \ //
// 2 4 8 //
/
bst.preOrder();
System.out.println();
}
}
输出:
5
3
2
4
6
8