[Leet Code] Binary Tree Level Order Traversal


こんにちは!
書類を書きたくないので...アルゴリズムを解く私はははは
今日、5月の3週目に6番目のアルゴリズムBinary Tree Level Order Traversalプールを作成します.

質問する



サマリ
与えられたBinary Treeからlevelの間で、nodevalueがリストに戻された問題に置かれる.

初志

dfsアルゴリズムを用いて、levelを増やすと、リストに格納されているvalueが多くなる.
最初の思いで引き受けた
アルゴリズムを学ぶ前に、木の問題に遭遇すると非常に困難になりますが、今は自分で考えて解決できると思うので嬉しいです>.<
コードについて説明します.

コードの説明

List<List<Integer>> result;
全局復帰を発表したresult.
result = new ArrayList<>();
dfs(root, 0);
ソリューション関数でresultを初期化し、dfs関数を実行します.
dfs関数
private void dfs(TreeNode node, int index) {
    if (node == null) return;

    if (result.size() <= index) result.add(new ArrayList<>());
    result.get(index).add(node.val);

    dfs(node.left, index + 1);
    dfs(node.right, index + 1);
}
パラメータとして、Binary Treeとツリーレベルを表すindexを受け入れます.**dfsの終了条件は、nodeなしで**に戻ります.resultArrayListとして宣言されているため、sizeindex以下であることは、レベルのノードがリストに追加されていないことを意味する.
したがって、この場合はnew ArrayList<>()addである.
そうでなければ、レベルを示すノードの少なくとも1つが保存されているので、indexにアクセスしてnode.valを保存することができる.
次に、node.val関数を返して、dfsを保存します.

完全なコード

class Solution {
    List<List<Integer>> result;

    public List<List<Integer>> levelOrder(TreeNode root) {
         result = new ArrayList<>();
         dfs(root, 0);

         return result;
    }

    private void dfs(TreeNode node, int index) {
        if (node == null) return;

        if (result.size() <= index) result.add(new ArrayList<>());
        result.get(index).add(node.val);

        dfs(node.left, index + 1);
        dfs(node.right, index + 1);
    }
}

の最後の部分


今は午前2時過ぎなので、解決が楽です.
難しい問題なら、明け方からがっかりして寝ていたと思います.
今回の位置付けを読んでいただき、ありがとうございます:)質問やフィードバックを歓迎します.