4

二分木で最長の道を見つけたい。それらをリストに追加する予定です。そうすれば、敵のキャラクターにイージーモードで長い道のりを進むように指示できます。

private static <T> ArrayList<T> depthFirstSearch(BinaryNode<T> node)
{
    if(node != null)
    {
        Stack<BinaryNode<T>> stack = new Stack<BinaryNode<T>>();

        stack.push(node);

        while(!stack.isEmpty())
        {
            BinaryNode<T> currentNode = stack.pop();



            if(currentNode.right != null)
                stack.push(currentNode.right);

            // We want to visit left child first, so push left node last.
            if(currentNode.left != null) 
                stack.push(currentNode.left);
        }
    }
}

私はそのコードを書きましたが、それは混乱です。DFSを使用して、最短のパスを見つけようとしています。助言がありますか?

編集:私は木の高さを持っています、私はこれを使ってそれを得ることができます。

public static <T> int height(BinaryNode<T> t)
{
    if (t == null)
        return -1;

    else 
        return 1 + Math.max(height(t.left), height(t.right));
}

私の問題は、リストにノードを追加できるように、DFSを使用して最長のパスを見つけたことをいつ知ることができるかということです。

4

3 に答える 3

8

ツリーの最長パスは「直径」と呼ばれます。ここでアルゴリズムの実装を見ることができます: http://www.geeksforgeeks.org/diameter-of-a-binary-tree/

于 2013-03-19T05:28:21.323 に答える