二分搜索树的中序遍历
- 先遍历node的左子树,再遍历node,最后遍历node的右子树;对node的遍历在遍历左子树和遍历右子树的中间,所谓中序遍历;
- 对于左子树和右子树的遍历也是中序遍历;
- 中序遍历的结果是从小到大的;
- 规模更小的同一个问题是:中序遍历node的左子树,中序遍历node的右子树;
- 不能再缩小的基本问题是:对node的情况的讨论;
- 如果node == null,无可遍历;
- 如果node != null,对node的遍历要在遍历左子树和右子树的中间;注意:不能再小的基本问题的代码不一定就在方法的最前几行,也可能夹杂在规模更小的问题的代码(递归调用)的中间;
// 二分搜索树的中序遍历
public void inOrder(){
inOrder(root);
}
// 中序遍历以node为根的二分搜索树, 递归算法
private void inOrder(Node node){
if(node == null)
return;
inOrder(node.left);
System.out.println(node.e);
inOrder(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.inOrder();
System.out.println();
}
}
输出:
2
3
4
5
6
8