【发布时间】:2020-04-15 16:41:12
【问题描述】:
因此,任务是编写一个函数,该函数返回 BST 元素的总和,该总和大于其直接子元素的总和。不计算叶节点。我是这样做的,树为空时的基本情况返回 0,如果它没有儿子也返回 0。然后我检查节点是否有一个或两个孩子以及总和的条件。
int sum(struct node* root)
{
if (root== NULL) return 0;
if (root->right == NULL && root->left==NULL) return 0;
if (root->right!= NULL && root->left != NULL)
{
if (((root->right)->key + (root->left)->key) < root->key) return root->key;
}
if (root->right != NULL && root->left==NULL)
{
if ((root->right)->key< root->key) return root->key;
}
if (root->left != NULL && root->right==NULL)
{
if ((root->left)->key < root->key) return root->key;
}
else return sum(root->right) + sum(root->left);
}
主要:
struct node* root = NULL;
add(&root,-4);
add(&root,6);
add(&root,8);
add(&root,-11);
add(&root,5);
add(&root,7);
add(&root,-20);
printf("%d",sum(root));
它应该返回 -1 (6+8-11-4),但我的函数不起作用我不知道为什么。
【问题讨论】:
-
在英语中,在描述树结构和进程层次结构等内容时,会避免使用术语“儿子”和“女儿”(以及“父亲”和“母亲”等)。使用中性的“父母”和“孩子”(以及“祖父母”、“孙子”)等。(“兄弟”或“姐妹”的兄弟姐妹。)
-
您可以而且应该将
(root->right)->key写成明确的root->right->key。括号不是必需的;经验丰富的 C 程序员出乎意料。如果你正在处理一些奇怪的东西,比如指向结构的指针——比如(*proot)->right->key——或者类似的东西,你有时需要括号。但对于常规情况,括号有点模糊。
标签: c function binary-search-tree