查找root和give节点之间的节点数

时间:2014-08-04 14:59:55

标签: java recursion binary-tree

所以在给定的二叉树(节点二进制搜索树)中,最初我想找到两个节点之间的节点数" p"和" q"。我首先找到这两个节点之间的最低共同祖先,例如"祖先"。然后我计算"祖先"之间的节点数量。和" p"和#34; ancestor"之间的节点数量和" 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;

}

但是通过这种方式,从根到左模式的结果是正确的,但无法在其他尺寸上找到节点。

任何帮助?

谢谢!

1 个答案:

答案 0 :(得分:0)

我弄清楚如何解决问题。通过递归。这可能不适用于我的原产地问题 “在两个给定节点之间找到节点号”但它确实返回了根与给定节点之间的节点数。

代码发布在下面。     public static int NodeToNodePath(BinaryTree root,             BinaryTree节点,int length){         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;
}

另外,我在GeekForGeeks上发现了一篇专门讨论我的原始问题的帖子,它被称为“查找二叉树的两个给定键之间的距离”,地址是: http://www.geeksforgeeks.org/find-distance-two-given-nodes/

谢谢大家!