微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

二叉树的高度:为什么这个解决方案在hackerrank中没有通过2/6的测试用例?

如何解决二叉树的高度:为什么这个解决方案在hackerrank中没有通过2/6的测试用例?

为使用中序遍历的二叉搜索树的高度编写了递归解决方案。

每次函数到达“空”节点(行尾)时,它都会重置名为“numLevels”的变量。每次方法到达行尾,如果 numLevels > finalVar,则 finalVar 变为 numLevels。​​

这是我的解决方案:

 static int finalVar= 0;
    static int numLevels= 0; 
    
    public static int height(Node root) {
        // traverse (in order),mL++ with every recursive call,reset when node == null
        findHeight(root);
        
        if (finalVar-1 == 1) return 0;  // special case defined in instructions
        else{
              return finalVar-1;
        }
    }
    
    public static void findHeight(Node node){
        numLevels++;       // every time we recursive call,we add
        
        if (node == null){
            if (numLevels > finalVar){
                finalVar=numLevels;
            }
            numLevels=0;
            return;
        }
        findHeight(node.left);
        findHeight(node.right);
    }

这是它没有通过的两个测试用例:

test case 1

和:

enter image description here

所有其他测试用例都通过了。任何人都可以发现它不起作用的原因吗? :(谢谢!

解决方法

只是随口吐槽,但将 numLevels 设置为 0 是否也会为另一个分支重置它?因为请记住,您的递归调用一直沿着最左侧的分支向下进行,然后是最后一个左侧的右侧的分支。 numLevels当时是0,永远不会比另一个分支大。

既然你正在制作一个辅助函数,就没有理由使用静态变量。只需传递当前的最大值和计数,然后做同样的事情。这样,就您的递归深度而言,您当前的深度是“线程安全的”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。