【问题标题】:Recursive to Iterative method for Binary Search Tree递归到二叉搜索树的迭代方法
【发布时间】:2015-11-29 15:53:17
【问题描述】:

我正在执行一项任务,以使用递归方法中的迭代方法来获取 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;
}

【问题讨论】:

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

标签: recursion binary-search-tree


【解决方案1】:

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

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

希望你理解你的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多