我有简单的代码打印路径到树中的特定节点。用java字符串我的FPGA实现是如下Java通过值和递归
//using strings
public static void getPathS(Node node,String path,int key){
if (node == null) {
return;
} else if(node.data == key) {
System.out.println(path+" "+key);;
}
getPathS(node.left,path+" "+node.data,key);
getPathS(node.right,path+" "+node.data,key);
}
假设有树下面给,
如果我呼吁3的getPaths,上面的实现将打印
1 34 3 //path from root to the element
如果我用下面的ArrayList实现相同的方法
public static List getPath(Node node, List<Integer> path, int key) {
if (node == null) {
//1 . path = new ArrayList<Integer>();
path = new ArrayList<Integer>();
// 2. or tried path.clear() -- it should clear the path
//return path;
return null;
} else if (node.data == key) {
path.add(node.data);
return path;
}
path.add(node.data);
return nonNull(getPath(node.left, path, key), getPath(node.right, path, key));
}
private List nonNull(List path1, List path2) {
if (path1 != null)
return path1;
if(path2 !=null)
return path2;
return null;
}
// class Node { Node left, Node right , int data; };
//Code to call getPath
Node node = new Node(1);
node.left = new Node(2);
node.left.left = new Node(4);
node.right = new Node(34);
node.right.right = new Node(3);
System.out.println(getPath(node, new ArrayList(), 3));
在第二实现中,我尝试了两种方法,当我们得到空节点,在第一次的方法,如果我给你新ArrayList
到路径,它打印的所有元素,即
[1, 2, 4, 34, 3]
如果我使用path.clear()
,只有它打印最后一个元素,即要搜索的元素。
我们如何确保ArrayList
在递归中以String方式工作?
什么是'nonNull(arg1,arg2)'? – Joffrey 2014-10-09 08:13:21
请检查更新代码 – Pradeep 2014-10-09 08:17:05
好的谢谢。请张贴第一次调用'getPath()'的代码。这里的问题是,你想添加/删除元素到我猜的同一个列表。你需要使用某种回溯。我会在几分钟内拿出一些东西。 – Joffrey 2014-10-09 08:19:30