leetcode_树_257。二分木のすべてのパス(#)

みなさん、こんにちは。私はキャベツに支配されている豚です。

勉強が大好きで、眠れず、食べるのを忘れている人は、女の子のシックで落ち着いた、無関心なコーディングのハンサムな男の子に夢中です。

1.主題の内容

二分木が与えられた場合、ルートノードからリーフノードへのすべてのパスを返します。
説明:リーフ・ノードは、子ノードのないノードを指します。
例:
入力:
1
/ \
2 3
\
5
出力:["1-> 2-> 5"、 "1-> 3"]
説明:すべてのルートノードからリーフノードへのパスは次のとおりです:1-> 2-> 5、1-> 3

2つの問題解決のアイデア

深さ優先の利便性を使用し、パスを保存するパラメーターを設定します。効率を上げるためにStringBuilderクラスが使用されることに注意してください。また、String、StringBuilder、およびStringBufferの違いも具体的に確認しました。さらに、入るたびにStringBuilderを作成する必要があります。これは、前のパスに戻った後、必ず前のパスの状態に戻る必要があるため、エラーが発生しやすい場所です。ビルドされていない場合は、元のベースで直接追加されますが、これは明らかに間違っています。

今日のStringBuilderを理解することに加えて、フロントミドルポストオーダートラバーサルは深さ優先トラバーサルに基づいていることも知っています。つまり、フロント、ミドル、バックはすべて深さ優先トラバーサルです。アクセスはルートノードから始まりますが、両者の違いはルートで何かをするときです。

3、コードの実装

class Solution {
    
    
    private List<String> res = new LinkedList<>();

    public List<String> binaryTreePaths(TreeNode root) {
    
    
         preOrder(root,"");
         return res;
    }

    public void preOrder(TreeNode root,String path) {
    
    
        if(root == null ) return;
        StringBuilder builder = new StringBuilder(path);
        if(root.left == null && root.right ==null) {
    
    
            builder.append(root.val);
            res.add(builder.toString());
            return;
        }
        builder.append(root.val+"->");
        preOrder(root.left,builder.toString());
        preOrder(root.right,builder.toString());
    }
}

ここに画像の説明を挿入します
改善後、公開コードを抽出しますが、それほど効率が良くなるとは思っていなかったので、今後コードを入力する際に​​は、この部分の詳細に注意を払う必要があります。

class Solution {
    
    

private List<String> res = new ArrayList<>();

    public List<String> binaryTreePaths(TreeNode root) {
    
    
         preOrder(root,"");
         return res;
    }

    public void preOrder(TreeNode root,String path) {
    
    
        if(root == null ) return;
        StringBuilder builder = new StringBuilder(path);
        builder.append(root.val);
        if(root.left == null && root.right ==null) {
    
    
            res.add(builder.toString());
            return;
        }
        builder.append("->");
        preOrder(root.left,builder.toString());
        preOrder(root.right,builder.toString());
    }
}

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_44226263/article/details/109345528