Recursion 二叉搜索树的递归迭代法

Recursion 二叉搜索树的递归迭代法,recursion,binary-search-tree,Recursion,Binary Search Tree,我正在做一个作业,用递归的迭代方法得到BST的高度。下面将提供递归代码和我的代码。它返回的高度比实际高度大一个。例如,假设高度为4,但返回5 //Provided code public int getHeight() { return getHeight(root); } private int getHeight(Node node) { if (node==null) { return -1; } else { int left

我正在做一个作业,用递归的迭代方法得到BST的高度。下面将提供递归代码和我的代码。它返回的高度比实际高度大一个。例如,假设高度为4,但返回5

//Provided code 
public  int getHeight() {
    return getHeight(root);
}

private int getHeight(Node node) {
    if (node==null) {
        return -1;
    } else {
        int leftHeight = getHeight(node.left);
        int rightHeight = getHeight(node.right);
        return Math.max(leftHeight, rightHeight) + 1;
    }
}

//my code
public int getHeightI() {
    return getHeightI(root);
}

private int getHeightI(Node node) {
    Node curr = node;
    int leftHeight = 0;
    int rightHeight = 0;
    if (curr!=null) {
        while (curr.left!=null) {
            leftHeight++; 
            curr = curr.left;
        } 
        while (curr.right!=null) {
            rightHeight++; 
            curr = curr.right; 
        }
    }   
    return Math.max(leftHeight, rightHeight)+1;
}

代码返回的树高比实际树高一个。我建议您使用此代码

int height(tree* root)
{
if(!root)
{ return -1;
}
else{
return __max(root->left,root->right);
}

希望您理解您的错误。

当前代码被
1
关闭的原因可能重复,因为您正在将
1
添加到返回语句中。但是你的算法本身也是错误的。请查看上面链接中的代码。@TimBiegeleisen感谢您的链接。它充满了查找深度的有用堆栈实现。然而,我正在寻找一种不使用堆栈来实现它的方法。是的,如果我删除return语句的+1,它会起作用,但我知道这不是修复此方法的正确方法。如果要以迭代方式执行此操作,需要使用某种堆栈式的数据结构。实际上,当您递归地求解它时,您仍然在使用一个堆栈:函数调用堆栈。实际上,如果您检查这两种方法的机器代码,它们看起来应该非常相似。