2016-05-14 28 views
0

在這段代碼中,我需要創建一個函數來計算我的BST中的偶數。我不知道如何通過我的樹的所有節點。下面是代碼:在BST中求和的偶數

#include <stdio.h> 
#include <stdlib.h> 
struct node 
{ 
    int key; 
    struct node *left, *right; 
}; 

struct node *newNode(int item) { 
struct node *temp=(struct node *)malloc(sizeof(struct node)); 
    temp->key = item; 
    temp->left = temp->right = NULL; 
    return temp; 
} 

struct node* insert(struct node* node, int key) { 
    if (node == NULL) return newNode(key); 
    if (key < node->key) 
     node->left = insert(node->left, key); 
    else 
     node->right = insert(node->right, key); 
    return node; 
} 

void main(void) 
{ 
    struct node *root = NULL; 
    int data[]={3,1,2,6,4,7,8}, n, i; 
    n=sizeof(data)/sizeof(data[0]); 
    for(i=0;i<n;i++) 
     root=insert(root,data[i]); 
} 
+0

編寫遍歷樹中所有元素的遞歸函數。它檢查每個元素以查看它是否均勻,然後將其添加到保存總和的變量中。 – Barmar

回答

0

嘗試這樣的事情。對不起,沒有C語言編譯器。

int sum(struct node *root) { 
    if (root == NULL) { 
    return 0; 
    } 
    int value = 0; 
    if (root->key % 2 == 0) { 
     value = root->key; 
    } 
    return value + sum(root->left) + sum(root->right); 
} 
+0

它的工作原理! :) 謝謝 –

0

你需要做不同的搜索,BFS或DFS之一,在樹的每一個節點搜索。同樣在每一刻你都應該保存偶數的實際總和。比較應該像

if(node->key % 2 == 0){ 
    final += node->key; 
} 

希望得到這個幫助。

+0

我有這個...但它錯了,因爲結果爲零 'void sum(struct node * root) { int sum = 0; (根 - >鍵%2 == 0) if(root!= NULL) { 如果(root-> key%2 == 0) sum = sum + root-> key; } } printf(「偶數總和爲%d」,sum); }' –