我有這個函式來檢查從一個節點到一個葉子的路徑的鍵的總和是否總是低于某個值 k,如果不是這種情況,一個標志設定為 1 以跟蹤它。
是否可以將這個函式設為 int 或 bool 型別并使其回傳 0 如果 sum 總是 < 比 k 和 1 如果存在 sum >= k 而不使用像我正在做的標志的情況?
int flag=0;
void checkSum(Node node,int sum,int k){
if(node==nullptr){
return;
}
sum=sum node->key;
if(node->left==nullptr && node->right==nullptr){
if(sum>=k){
flag=1;
}
return;
}
checkSum(node->left,sum,k);
checkSum(node->right,sum,k);
}
uj5u.com熱心網友回復:
怎么樣:
bool checkSum(Node *node, int sum, int k){
if (node == nullptr) return true;
sum = node->key;
if (sum >= k) return false;
return checkSum(node->left, sum, k) && checkSum(node->right, sum, k);
}
如果您在不回傳 false 的情況下將其設定為 nullptr,因此沿路徑不超過 k,您可以將 true 回傳給呼叫者。如果在任何時候 sum 超過 k,您可以回傳 false,這將使進一步的遞回呼叫短路并由于 && 運算子而一直傳播回根。因此,樹以 dfs 方式進行探索,并在路徑和超過 k 時將 false 回傳到根,否則回傳 true。
然而,這個實作假設了非負節點鍵。如果無法假設,您真的只想檢查葉節點的總和,則可以將其修改為:
bool checkSum(Node *node, int sum, int k) {
if (!node->left && !node->right)
return sum < k;
sum = node->key;
return checkSum(node->left, sum, k) && checkSum(node->right, sum, k);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380760.html
