Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 根据二叉树中的值查看两个节点是否为近亲_C_Function_Binary Tree - Fatal编程技术网

C 根据二叉树中的值查看两个节点是否为近亲

C 根据二叉树中的值查看两个节点是否为近亲,c,function,binary-tree,C,Function,Binary Tree,我正在尝试解决以下问题: 我必须创建一个函数来接收树和两个数字(两个不同节点的值),并找出这两个节点是否在同一级别,但它们没有相同的父节点 这是我的密码。你知道我怎么修吗 int level(Tree tree, int val, int lev) { if(tree == NULL) return 0; if(tree->value == val) return lev; int l=level(tree->left,tree->value,lev+1

我正在尝试解决以下问题: 我必须创建一个函数来接收树和两个数字(两个不同节点的值),并找出这两个节点是否在同一级别,但它们没有相同的父节点

这是我的密码。你知道我怎么修吗

int level(Tree tree, int val, int lev)
{
    if(tree == NULL) return 0;
    if(tree->value == val) return lev;
    int l=level(tree->left,tree->value,lev+1);
    if(l!=0) return l;
    return level(tree->right,tree->value,lev+1);
}

int isCousin(Tree tree, int value1, int value2) {
    if((level(tree,value1,1)==level(tree,value2,1)) && !(isCousin(tree,value1,value2)))
        return 1;
    else return 0;
}

一种简单的方法是创建一个函数,搜索树上的某个值,如果元素不存在,则返回元素的深度-1。通过为这两个值强制转换该函数,如果它们都返回相同的深度,那么您知道树中至少存在相同级别的数字。考虑到这一点,你需要做的就是得到一个,你可以在θ(log2(n))中做,因为它是一棵树,然后检查它的兄弟是否是另一个值:如果是,那么他们是兄弟,如果不是,他们是表亲。
这肯定不是最有效的方法,但它是解决问题的简单方法。希望有帮助:)

“这是我的代码。不工作,seg故障。”-我们不是调试服务。阅读并提供*所有必要信息,包括:。请注意,对于此类家庭作业问题,附加要求适用。调试是编程的一个主要部分,因此启动调试器并熟悉它。您正在使用调用isCousin()时使用的参数调用isCousin(),这将无限递归。亲爱的@Olaf,我知道如何使用调试器。我问是因为我找不到解决办法。所以,你的评论既没有帮助也不礼貌。哦,这可能是一个很好的高尔夫问题。@Cristina所以。。。当您在调试器下运行它时,它工作了吗?发生这种情况,通常是由于UB,例如未初始化的变量。