1

ツリーとそれらを再帰的に検索する方法に関する多くの例を見ましたが、私の場合は好きではありません。だから私は尋ねることにしました。

葉から根へのパスを見つけるにはどうすればよいですか?

私の問題は、親ごとに多くの子ノードがあることです。これが私のコードの例です:

 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;
}

問題は、子をチェックするたびに、葉が見つからない場合は元に戻しますが、パスに子ノードを追加すると、パスが非常に大きくなることです。

4

1 に答える 1