[英]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);
}
所有其他測試用例都通過了。 任何人都可以找出它不起作用的原因嗎? :( 謝謝!
只是吐口水,但不會將 numLevels 設置為 0 也會為另一個分支重置它嗎? 因為請記住,您的遞歸調用一直沿着最左邊的分支向下,然后是最后一個左邊的右邊的分支。 當時的 numLevels 為 0,永遠不會大於另一個分支。
既然你正在制作一個助手 function 無論如何,沒有理由有 static 變量。 只需傳遞當前的最大值和計數,然后做同樣的事情。 這樣,就遞歸深度而言,您當前的深度是“線程安全的”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.