簡體   English   中英

二叉樹的高度:為什么這個解決方案沒有通過hackerrank中的2/6測試用例?

[英]Height of a binary tree: why is this solution not passing 2/6 test cases in hackerrank?

為使用中序遍歷的二叉搜索樹的高度編寫了遞歸解決方案。

每次 function 到達“空”節點(行尾)時,它都會重置名為“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);
    }

這些是它沒有通過的兩個測試用例: 測試用例 1

和: 在此處輸入圖像描述

所有其他測試用例都通過了。 任何人都可以找出它不起作用的原因嗎? :( 謝謝!

只是吐口水,但不會將 numLevels 設置為 0 也會為另一個分支重置它嗎? 因為請記住,您的遞歸調用一直沿着最左邊的分支向下,然后是最后一個左邊的右邊的分支。 當時的 numLevels 為 0,永遠不會大於另一個分支。

既然你正在制作一個助手 function 無論如何,沒有理由有 static 變量。 只需傳遞當前的最大值和計數,然后做同樣的事情。 這樣,就遞歸深度而言,您當前的深度是“線程安全的”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM