找到root和5的倍数之间的路径

时间:2013-03-04 10:42:49

标签: java algorithm tree binary-tree

我很难实现一个程序,用于从b-tree root查找节点的路径,该节点是5的倍数。

示例:

     12
    /  \
   4    7
  /\    /\
 5  3  4 10

将此视为树。  程序应该打印

12 -> 4 -> 5

12 -> 7 -> 10

编辑:

是的我已经尝试过以下是我正在遵循的算法:我按顺序遍历并比较5的倍数值。如果是,我开始在LinkedList中添加节点并返回该列表。但是这种方法只有在我有5的倍数时才有效。如果有更多的倍数,它就会失败。

以下是我的尝试:

LinkedList<Integer> getPaths(Node parent, int multiple){

    if(parent == null)
        return null;

    LinkedList list = new LinkedList();
    list = getPaths(parent.getLeftChild(), 5);


    if(parent.getSID() % multiple == 0){
        list.add(parent.getSID());
        return list;
    }

    list = getPaths(parent.getRightChild(),5);

    if(list != null)
        list.add(parent.getSID());

    return list;

}

1 个答案:

答案 0 :(得分:0)

当你这样做时,问题是:

list = getPaths(parent.getRightChild(), 5);

你覆盖这里返回的值:

list = getPaths(parent.getLeftChild(), 5);

您可能需要LinkedList<LinkedList<Integer>>来存储所有路径。

全局列表:

LinkedList<LinkedList<Integer>> globalList;
LinkedList<Integer> getPaths(Node parent, int multiple)

或绕过列表:

LinkedList<Integer> getPaths(Node parent, int multiple,
                             LinkedList<LinkedList<Integer>> bigList)

要使其工作将需要对当前程序进行相当多的更改,您需要在某些位置复制列表,并可能切换填充列表的顺序(将其从填充自下而上更改)自上而下)。