我读了一个算法来寻找二叉树中两个节点之间的距离。
这段代码在二叉树中找到(从根到给定节点的1个距离)。
int Pathlength(Node* root, int n1) {
if (root != NULL) {
int x=0;
if ((root->data == n1) || (x=Pathlength(root->left, n1))>0||(x=Pathlength(root->right, n1))>0)
{
return x + 1;
}
return 0;
}
return 0;
}
我不明白的是,“x”有两个值,一个来自左子树,另一个来自右子树,它如何知道返回哪个值
例如,如果树类似于:
20
/ \
8 2
然后调用路径长度(根,8)
,
x=Pathlength(root->left,8)=1
x=Pathlength(root->right,2)=0
那么,在语句“returnx1
”中,它如何返回正确的x值?
你需要明白在C/C中,逻辑OR||
是短路的:
在计算A | | B时,如果A为真,则不计算B(因为无论B是什么,A | | B始终为真)。
在此表达式中:
(root->data == n1) || (x=Pathlength(root->left, n1))>0||(x=Pathlength(root->right, n1))>0
自路径长度(根)-
问题内容: 我想在非二叉树中搜索一个项目(任何节点都可以有n个孩子)并立即退出递归。所讨论的节点可以是任何节点,而不仅仅是叶子。 这是我的代码,但我没有完整的搜索。 nNode包含: (是孩子) 和数据对象。 问题答案: 探索第一个孩子后,您不应该退出。您不需要循环前面的语句。
好的,我必须创建一个递归方法来计算树中的节点,我做到了(变量名是葡萄牙语的,对不起): arvbin是二叉树,esq和dir是对树分支的左右引用。 我以为这会奏效,但由于某种原因,当我尝试运行它时,它返回0。我使用了一些调试,我认为问题在于,当方法完成并返回到原始的非递归方法时,cardinalidade变量被设置为0。我不确定这是否是因为自动装箱会弄乱我的整数并将其转换为int,然后当我调用该方
我需要创建一个递归方法,将二叉查找树的根节点作为参数。这个递归方法将返回整个二叉查找树中内部节点总数的int值。 这就是我到目前为止所拥有的: 有没有更好的办法?我还坚持寻找迭代解。
我坚持使用递归函数来查找二叉树中节点的深度,更具体地说,是在else条件中: 如果树是二叉搜索树,知道左子值总是低于父值,右子值总是高于父值,我可以添加一个If条件,这样如果节点x值低于根,我总是返回根- 当查看函数时,假设节点总是存在的,节点x永远不是根,并且在开始时传递的深度总是0。 如果树是二叉搜索:
我试图通过自顶向下递归实现二叉树最低公共祖先(LCA)问题的解决方案。 我使用的方法是: 想法:找到在任一子树中有一个所需节点的节点,而另一个所需节点是相反的子树。 以下是确切的实现: 例如: 这将返回树的根作为结果。结果=TreeNode(2)
我正在写二叉树的删除函数。我把我的案子分为三个。一个同时具有两个子项null。一个有一个子项为null,另一个有两个子项都不为null。我在案例3之后递归调用delete操作。对于ex,如您所见,我在节点50上调用了删除操作。这将用75替换父节点50。现在我必须从右子树中删除节点75。所以我递归地运行了delete过程。但我没有得到所需的输出,因为75是50的右子树中的根节点。如何修复它以便能够删