Java 查找根节点和给定节点之间的节点数
所以在一个给定的二叉树(节点二叉搜索树)中,首先我想找到两个节点“p”和“q”之间的节点数。我首先在这两个节点之间找到最低的共同祖先,比如“祖先”。然后分别计算“祖先”和“p”之间的节点数以及“祖先”和“q”之间的节点数,最后将它们相加 我尝试了递归的方法来获取“祖先”和“p”或“q”之间的节点数,但失败了。不喜欢递归Java 查找根节点和给定节点之间的节点数,java,recursion,binary-tree,Java,Recursion,Binary Tree,所以在一个给定的二叉树(节点二叉搜索树)中,首先我想找到两个节点“p”和“q”之间的节点数。我首先在这两个节点之间找到最低的共同祖先,比如“祖先”。然后分别计算“祖先”和“p”之间的节点数以及“祖先”和“q”之间的节点数,最后将它们相加 我尝试了递归的方法来获取“祖先”和“p”或“q”之间的节点数,但失败了。不喜欢递归 public static int NodeToNodePath(BinaryTree root, BinaryTree node, int length){ if(r
public static int NodeToNodePath(BinaryTree root, BinaryTree node, int length){
if(root == null && node == null)
return 0;
if(root == null || node == null)
return 0;
if(root.rootElement == node.rootElement){
return length;
}
int sum = NodeToNodePath(root.left, node, length + 1);
if(sum != 0)
return sum;
sum = NodeToNodePath(root.right, node, sum);
return sum;
}
但通过这种方式,从根到左模式的结果是正确的,但无法在其他大小上找到节点
有什么帮助吗
谢谢 我想出了解决这个问题的办法。通过递归。这可能不适用于我的原产地问题 “查找两个给定节点之间的节点数”,但它确实返回根节点和给定节点之间的节点数 代码发布在下面。 公共静态int NodeToNodePath(二叉树根, 二进制树节点,int长度){ if(root==null) 返回0
if(root.rootElement == node.rootElement){
length += 1;
return length;
}
int left = NodeToNodePath(root.left, node, length);
if(left != 0){
return left + 1;
}
int right = NodeToNodePath(root.right, node, length);
if(right != 0){
return right + 1;
}
return 0;
}
另外,我在GeekForgeks上发现了一个帖子,专门讨论了我的起源问题,叫做“查找二叉树的两个给定键之间的距离”。地址是:
谢谢大家!您没有计算节点深度级别的方法吗?例如,如果共同祖先的深度为3级,左侧为5级,右侧为7级,则距离为(5-3)+(7-5)不,我没有那种方法。但现在我一直在寻找根节点和特定节点之间的节点数。如果有第二个,为什么需要第一个?如果你知道“p”和“q”在树中,为什么需要?是否应该在左子树和右子树之间做出决定,从
根到节点?基本上就像搜索BST一样(您已经做过一次,所以这似乎是多余的)。我需要函数的第一个原因,它只取“根”,两个节点“p”和“q”作为输入。但是“p”和“q”之间的路径不必经过根。这就是为什么我首先需要找到最低的共同祖先。