我有作业,而且我不明白如何在二叉树中递归计算奇数
我尝试使用for语句,但是我的老师说我需要进行递归操作,这很容易做到,但是我无法实现。
// create Tree
struct Node
{
int key;
Node *left, *right;
};
// Function to print all odd nodes
void oddNode(Node* root)
{
if (root != NULL) {
oddNode(root->left);
// if node is odd then print it
if (root->key % 2 != 0)
printf("%d ", root->key);
oddNode(root->right);
}
}
// Driver Code
int main()
{
/* Let us create following BST
5
/ \
3 7
/ \ / \
2 4 6 8 */
Node* root = NULL;
root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 2);
root = insert(root, 4);
root = insert(root, 7);
root = insert(root, 6);
root = insert(root, 8);
oddNode(root);
}
输出应为3,但实际输出为空
答案 0 :(得分:0)
正确的解决方案:
int oddNode(Node* root)
{
int count = 0;
if (root) {
count += oddNode(root->left);
if (root->key % 2 != 0 && root->key>0) {
printf("%d ", root->key);
++count;
}
count += oddNode(root->right);
}
return count;
}
// Driver Code
int main()
{
/* Let us create following BST
5
/ \
3 7
/ \ / \
2 4 6 8 */
Node node8 = { 8, nullptr, nullptr };
Node node6 = { 6, nullptr, nullptr };
Node node4 = { 4, nullptr, nullptr };
Node node2 = { 2, nullptr, nullptr };
Node node7 = { 7, &node6, &node8 };
Node node3 = { 3, &node2, &node4 };
Node node5 = { 5, &node3, &node7 };
Node *root = &node5;
int count = oddNode(root);
std::cout
<< "\n"
<< "Number of odd nodes: " << count << '\n';
}