ツリーとそれらを再帰的に検索する方法に関する多くの例を見ましたが、私の場合は好きではありません。だから私は尋ねることにしました。
葉から根へのパスを見つけるにはどうすればよいですか?
私の問題は、親ごとに多くの子ノードがあることです。これが私のコードの例です:
private LinkedList<TreeNode> findPath(LinkedList<TreeNode> path, TreeNode root, TreeNode leaf){
if(root == null || root.name==null) return null;
path.add(root);
if(root.name.equals(leaf.name))
return path;
//Check if the leaf that we are looking for is one of the root children
if(root.children==null) return null;
for(TreeNode children : root.children){
if(children.name.equals(leaf.name)){
path.add(children);
return path;
}
}
//Search in all the childrens of the root recursively
for(TreeNode children : root.children){
LinkedList<TreeNode> result = findPath(path, children, leaf);
if(result != null)
return result;
}
//The leaf is not found.
return null;
}
問題は、子をチェックするたびに、葉が見つからない場合は元に戻しますが、パスに子ノードを追加すると、パスが非常に大きくなることです。