Java 查找根节点和给定节点之间的节点数

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

所以在一个给定的二叉树(节点二叉搜索树)中,首先我想找到两个节点“p”和“q”之间的节点数。我首先在这两个节点之间找到最低的共同祖先,比如“祖先”。然后分别计算“祖先”和“p”之间的节点数以及“祖先”和“q”之间的节点数,最后将它们相加

我尝试了递归的方法来获取“祖先”和“p”或“q”之间的节点数,但失败了。不喜欢递归

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”之间的路径不必经过根。这就是为什么我首先需要找到最低的共同祖先。