【问题标题】:find path between root and multiple of 5查找根和 5 的倍数之间的路径
【发布时间】:2013-03-04 20:27:05
【问题描述】:

我很难实现一个程序来查找从 b 树根节点到节点的路径,该路径是 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;

}

【问题讨论】:

  • 你试过了吗?
  • 我找不到任何“?”在你的问题中。
  • 是的,我已经尝试过,以下是我正在遵循的算法:我按顺序遍历并比较 5 的倍数的值。如果是,我开始在 LinkedList 中添加节点并返回回列表。但是这种方法只有在我有一个 5 的倍数时才有效。如果有更多倍数,它就会失败。
  • 将重要信息作为问题的一部分发布(通过编辑)。
  • 我已经编辑了帖子。

标签: java algorithm tree binary-tree


【解决方案1】:

问题是,当你这样做时:

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

你覆盖这里返回的值:

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

您可能需要LinkedList&lt;LinkedList&lt;Integer&gt;&gt; 来存储所有路径。

全局列表:

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

或绕过列表:

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

但是,要使其正常工作需要对您当前的程序进行相当多的更改,您需要在某些点复制列表,并且可能会切换填充列表的顺序(将其更改为自下而上填充自上而下)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2016-07-05
    • 1970-01-01
    • 2018-06-06
    • 2016-07-22
    • 2014-10-06
    相关资源
    最近更新 更多