2014-04-17 39 views
0

我有一個二叉樹數據結構與以下腳印。我使用C. 節點是含有如何查找二叉樹中對象的最大尺寸?

Node* left 

Node* right 

int key; 

VECTOR data; 

樹是由鍵(例如左當前一個的節點具有較低的鍵的值),而不是數據平衡的結構體。我想找到具有最大向量的節點。有一個函數get_size(data),但我不知道如何遞歸調用一個函數來獲取整個樹中的最大向量大小。

回答

0

我會嘗試沿着

int find_max_data_size(Node * p) { 

    if(!p) return 0; 

    int const left_size = find_max_data_size(p->left); 
    int const right_size = find_max_data_size(p->right); 
    int const my_size = get_size(p->data); 

    return max(left_size, right_size, my_size); 
} 

線的東西,並呼籲find_max_data_size(root);

+0

我在其他地方看到了這個算法,但我認爲它不起作用。如果當前節點爲NULL,我看到它返回-1,我想在這種情況下返回0,或者-1是正確的。感謝芽。 – user3546030

+0

@ user3546030:對於我來說,在兩種情況下大小爲0:(1)NULL節點或(2)具有空數據的非NULL節點。我沒有看到-1是否合適。 – Arun

+0

好的謝謝。你確定這個算法是可行的,因爲測試它我沒有得到正確的數字。完全有可能我把其他東西搞砸了,因爲這是一個巨大項目的一小部分。我打印出功能中的最大值,然後打印出最大值。函數中的printf並不等於我放入樹中的所有東西。這是我的問題嗎? – user3546030

0
void walk(NODE_T *I__node, size_t *maxVectorSize) 
    { 
    if(I__node) 
     { 
     size_t dataSize; 

     dataSize = get_size(I__node->data, maxVectorSize); 
     if(dataSize > *maxVectorSize) 
     *maxVectorSize = dataSize; 

     walk(I__node->left, maxVectorSize); 
     walk(I__node->right, maxVectorSize); 
     } 

    return; 
    } 
+0

如果我在步行呼叫之間打印大小,我會得到與上述答案不同的大小。有任何想法嗎? – user3546030