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

See if two nodes are cousins based on value in 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);
    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;
}

一个简单的方法是创建一个函数来搜索树上的某个值和 return 元素的深度,如果不存在则为 -1。有了它,您就可以为这两个值转换该函数,如果它们 return 具有相同的深度,那么您知道至少这些数字存在于同一级别的树中。考虑到这一点,你需要做的就是达到一个,你可以在 θ(log2(n)) 中完成,因为它是一棵树,然后检查它的兄弟是否是另一个值:如果是,那么他们就是兄弟,如果不是,他们就是兄弟是表亲。 这当然不是最有效的方法,但它是解决问题的简单方法。希望对您有所帮助:)