我有一個二叉樹數據結構與以下腳印。我使用C. 節點是含有如何查找二叉樹中對象的最大尺寸?
Node* left
Node* right
int key;
VECTOR data;
樹是由鍵(例如左當前一個的節點具有較低的鍵的值),而不是數據平衡的結構體。我想找到具有最大向量的節點。有一個函數get_size(data),但我不知道如何遞歸調用一個函數來獲取整個樹中的最大向量大小。
我有一個二叉樹數據結構與以下腳印。我使用C. 節點是含有如何查找二叉樹中對象的最大尺寸?
Node* left
Node* right
int key;
VECTOR data;
樹是由鍵(例如左當前一個的節點具有較低的鍵的值),而不是數據平衡的結構體。我想找到具有最大向量的節點。有一個函數get_size(data),但我不知道如何遞歸調用一個函數來獲取整個樹中的最大向量大小。
我會嘗試沿着
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)
;
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;
}
如果我在步行呼叫之間打印大小,我會得到與上述答案不同的大小。有任何想法嗎? – user3546030
我在其他地方看到了這個算法,但我認爲它不起作用。如果當前節點爲NULL,我看到它返回-1,我想在這種情況下返回0,或者-1是正確的。感謝芽。 – user3546030
@ user3546030:對於我來說,在兩種情況下大小爲0:(1)NULL節點或(2)具有空數據的非NULL節點。我沒有看到-1是否合適。 – Arun
好的謝謝。你確定這個算法是可行的,因爲測試它我沒有得到正確的數字。完全有可能我把其他東西搞砸了,因爲這是一個巨大項目的一小部分。我打印出功能中的最大值,然後打印出最大值。函數中的printf並不等於我放入樹中的所有東西。這是我的問題嗎? – user3546030