根据二叉树中的值查看两个节点是同类

时间:2018-04-07 17:28:35

标签: 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);
    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 个答案:

答案 0 :(得分:0)

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