我試圖解決 GeeksForGeeks 問題二叉樹的大小:
給定大小為 N 的二叉樹,您必須計算其中的節點數。例如,下面樹中的節點數為 4。
1 / \ 10 39 / 5
不幸的是,對于下面的測驗用例,我的遞回代碼得到了“不正確的答案”。有人可以告訴我哪里出錯了嗎?
Input:
2 // Number of test cases
1 2 3 // Test Case #1
10 5 9 N 1 3 6 // Test Case #2
My Output:
3
9
Expected Output:
3
6
我的代碼:
/* Tree node structure used in the program
struct Node
{
int data;
Node* left;
Node* right;
}; */
/* Computes the number of nodes in a tree. */
int nodes=0;
void dfs(Node* node) {
if (node==NULL) return;
nodes;
// cout << node->data << " ";
dfs(node->left);
dfs(node->right);
}
int getSize(Node* node)
{
// Your code here
dfs(node);
return nodes;
}
uj5u.com熱心網友回復:
錯誤是您的代碼具有int nodes僅初始化一次的全域變數。當getSize被多次呼叫時,只有在第一次呼叫時,您才能確定它確實為零。所有其他呼叫只會繼續增加該計數器而不會重置它。
因此,要么在呼叫之前重置該計數器dfs,要么 - 更好地 - 重新設計您的代碼,以便您根本不需要全域計數器,例如通過dfs 回傳一個計數器。如果你這樣做,你甚至可以getSize自己進行遞回,而不需要任何單獨的dfs函式。
注意:不要NULL在 C 中使用,但是nullptr.
這是一個擾流板解決方案:
int getSize(Node* node) { if (node==nullptr) return 0; return 1 getSize(node->left) getSize(node->right); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/528337.html
上一篇:如果陣列中不存在該值,我如何修改程式以回傳false
下一篇:將n維陣列的值顯示為字串
