c - 树函数检查一个节点的值是否等于前两个节点的值
问题描述
我想创建一个函数,从每个路径(左或右)中的第三个节点检查它是否等于树中前两个节点的总和。
这是我的代码,但它不起作用:
typedef struct node
{
int data;
struct node *left;
struct node *right;
} node;
int goldtree(node *root)
{
int sumleft=0,sumright=0;
if (root->left==NULL || root->right ==NULL)
return 0;
sumleft+=root->data+goldtree(root->left);
sumright+=root->data+goldtree(root->right);
if (goldtree(root->right)==sumright || sumleft==goldtree(root->left))
return 1;
}
这是一个例子:
[ ]
解决方案
好吧,对不起,我第一次以错误的方式理解您的问题!删除了上一个答案:/
所以,你想检查树是否golden
,如果我没有错,规则如下:
- 每个当前节点都是前两个节点的总和,根节点除外。
- 如果存在从根到离开节点的这样一条路径,那么这棵树就是金色的。
你可以改变你的功能,如下所示:
int goldtree(node *root, int flag){
int result = 0;
if(root == NULL) return 0;
/* we have come up to leave node */
else if(root->left == NULL && root->right == NULL) return 1;
else{
/* we would traverse only the path where child node's value - current node's value is equal to prev node' value */
if(root->left != NULL && root->left->data - root->data == flag) {
result = goldtree(root->left, root->data);
}
if(root->right != NULL && root->right->data - root->data == flag){
result = goldtree(root->right, root->data);
}
return result;
}
}
要调用的驱动程序函数goldtree
是:
goldtree(root, 0);
注意:为什么我们在遍历路径之前检查节点的值是,我们只会考虑那些子节点的值等于当前节点+上一个节点值的路径;
如果您的路径如下所示:
1
/
2
/
3
当您在节点中时,2
您可以考虑子节点的前两个节点值3
:
3 - 2 == 1 --> true