[英]Return in case of Recursive call to a method
我有一段代碼需要深入了解,我不想知道該問題的正確解決方案。 我只想知道為什么我的概念失敗了。 所以功能是檢查二叉樹是否是BST。 如果需要返回1,否則返回0。 我的代碼如下
int isBST(Node root) {
if(root == null)
return 1;
if(root.left!=null) {
if(root.left.data<root.data)
isBST(root.left);
else
return 0; // line:a
}
if(root.right!=null) {
if(root.right.data<root.data)
isBST(root.right);
else
return 0;
}
return 1;
}
對於這一部分,當我有如下的二叉樹時:
5
\
7
/
8
我希望它達到8的值並在line:a處中斷,但是它返回1而不是0。現在我知道0返回到父調用方法。 但這不是因為我進行了isBST調用而沒有捕獲返回值而終止嗎? 請不要指出是否還有其他錯誤。
對於一般情況,您的方法行不通。 測試樹是否為BST的方法是遞歸檢查當前節點是否大於左側子樹的最大元素,並且小於右側子樹的最小元素。 另外,您在遞歸調用中缺少返回值:
return isBST(root.left);
...
return isBST(root.right);
順便說一句,為什么要為此返回0
或1
? 請使用false
或true
,將返回類型更改為boolean
。
您應該檢查正確的數據是否大於當前數據,並返回遞歸調用的值
if(root.right.data>root.data)
我看到以下問題:
isBST(root.left)
或isBST(root.right)
為false,則需要立即返回0(順便說一句,為什么不使用布爾值?)。 root.right.data<root.data
應該被反轉: root.right.data>=root.data
。 因此,這是修改后的代碼(保留int
返回類型):
int isBST(Node root) {
if(root == null)
return 1;
if(root.left!=null) {
if(root.left.data<root.data) {
if (isBST(root.left) == 0)
return 0;
} else
return 0;
}
if(root.right!=null) {
if(root.right.data>=root.data) {
if (isBST(root.right) == 0) {
return 0;
}
} else
return 0;
}
return 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.