我很难实现一个程序,用于从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;
}
答案 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)
要使其工作将需要对当前程序进行相当多的更改,您需要在某些位置复制列表,并可能切换填充列表的顺序(将其从填充自下而上更改)自上而下)。