Java 在二元搜索树中查找范围内的数据值,并按升序打印出来

Java 在二元搜索树中查找范围内的数据值,并按升序打印出来,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,这是一个家庭作业。我需要递归遍历一个二叉搜索树,找出一个节点的数据值是否在某个范围内(包括该范围),并按升序打印出来 我的思维过程是:要按升序打印数据值,我需要在搜索树上按顺序遍历。为了有效地遍历,如果节点的左子节点小于下限值,并且节点的数据小于下限值,则程序应停止向左遍历。同样,如果节点的右子节点大于上限值,且节点的数据大于上限值,则程序应停止向右遍历 因此,我的实现出现了错误: public void rangeSearch(int lower, int upper) { if (l

这是一个家庭作业。我需要递归遍历一个二叉搜索树,找出一个节点的数据值是否在某个范围内(包括该范围),并按升序打印出来

我的思维过程是:要按升序打印数据值,我需要在搜索树上按顺序遍历。为了有效地遍历,如果节点的左子节点小于下限值,并且节点的数据小于下限值,则程序应停止向左遍历。同样,如果节点的右子节点大于上限值,且节点的数据大于上限值,则程序应停止向右遍历

因此,我的实现出现了错误:

public void rangeSearch(int lower, int upper) {
    if (lower > upper)
        throw new IllegalArgumentException("lower > upper");

    if (root != null)
        rangeSearchTree(root, lower, upper);
}

private static void rangeSearchTree(Node root, int lower, int upper) {
    Node leftChild = root.left;
    Node rightChild = root.right;
    if (leftChild != null && root.key > lower) {
        root = leftChild;
        rangeSearchTree(root, lower, upper);
    } 
    if (root.key >= lower && root.key <= upper) {
        System.out.print(root.key + " ");
    } 
    if (rightChild != null && root.key < upper) {
        root = rightChild;
        rangeSearchTree(root, lower, upper);
    }
}
当我输入
6
作为下限值,输入
9
作为上限值时,我得到
688
。正确答案应该是
67889
。有什么建议吗?

if(leftChild!=null&&root.key>lower){
if (leftChild != null && root.key > lower) {
    root = leftChild;  <---- Gotcha!
    rangeSearchTree(root, lower, upper);
} 
if (root.key >= lower && root.key <= upper) {
root=leftChild;=lower&&root.key
if(leftChild!=null&&root.key>lower){

root=leftChild;=lower&&root.key如果第二个是第一个,我认为问题应该解决。

如果第二个是第一个,我认为问题应该解决。

谢谢SJuan76!你搞定了。谢谢SJuan76!你搞定了。嗨@Prithviraj。第二个是什么?你能举个例子吗?嗨@Prithviraj.Th第二,什么?你能举个例子吗?
if (leftChild != null && root.key > lower) {
    root = leftChild;  <---- Gotcha!
    rangeSearchTree(root, lower, upper);
} 
if (root.key >= lower && root.key <= upper) {