根据二叉树中的值查看两个节点是否是表亲
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)) 中完成,因为它是一棵树,然后检查它的兄弟是否是另一个值:如果是,那么他们就是兄弟,如果不是,他们就是兄弟是表亲。
这当然不是最有效的方法,但它是解决问题的简单方法。希望对您有所帮助:)
我正在尝试解决以下问题: 我必须创建一个函数来接收树和两个数字(两个不同节点的值)并找出这两个节点是否在同一级别但它们没有相同的父节点。
这是我的代码。你知道我该如何解决吗?
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)) 中完成,因为它是一棵树,然后检查它的兄弟是否是另一个值:如果是,那么他们就是兄弟,如果不是,他们就是兄弟是表亲。 这当然不是最有效的方法,但它是解决问题的简单方法。希望对您有所帮助:)