我有一個非常簡單的二進制樹狀結構,是這樣的:如何獲取二叉樹的大小?
struct nmbintree_s {
unsigned int size;
int (*cmp)(const void *e1, const void *e2);
void (*destructor)(void *data);
nmbintree_node *root;
};
struct nmbintree_node_s {
void *data;
struct nmbintree_node_s *right;
struct nmbintree_node_s *left;
};
有時我需要提取另一個「樹」,我需要以更新的獲取大小的「提取的樹」初始'樹'的大小。
我想兩種做法:
1)使用遞歸函數,是這樣的:在一個反覆做
unsigned int nmbintree_size(struct nmbintree_node* node) {
if (node==NULL) {
return(0);
}
return(nmbintree_size(node->left) + nmbintree_size(node->right) + 1);
}
2)前序/序/後序遍歷方式(使用堆棧/隊列)+計算節點。
您認爲哪種方法更能「防止內存故障」/性能?
任何其他建議/提示?
備註:我可能會在將來爲我的小項目使用此實現。所以我不想意外失敗:)。
這是功課嗎?如果是這樣,請添加'家庭作業'標籤。 – sbi 2010-04-02 17:23:18
這不是作業,我只是實現一棵二叉樹。 – 2010-04-02 17:25:05