我有簡單的代碼打印路徑到樹中的特定節點。用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