Swordは、6日目の検索およびバックトラッキングアルゴリズムを提供することを指します(単純)

インタビューの質問32-I.二分木を上から下に印刷する

トピックの説明

二分木の各ノードは上から下に印刷され、同じレイヤーのノードは左から右に印刷されます。
例:
二分木がある場合:[3,9,20、null、null、15,7]、
ここに画像の説明を挿入

戻り値:
[3,9,20,15,7]

アイデア

これは階層的トラバーサルであり、レイヤーごとのトラバーサルであるため、dfsは使用できません。使用できるのは、bfsのみで、Pythonで両端キューであるキューを使用できます。

コード

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        if not root :
            return []
        q = collections.deque()
        q.append(root)
        a = []
        while q :
            t = q.popleft()
            if t.left :
                q.append(t.left)
            if t.right :
                q.append(t.right)
            a.append(t.val)
        return a

剣はオファー32-IIを指します。バイナリツリーIIを上から下に印刷します

トピックの説明

二分木は上から下にレイヤーで印刷され、同じレイヤーのノードは左から右に印刷され、各レイヤーは1行に印刷されます。

サンプル

入力の説明は前のトピックと同じで、
出力の説明は次のとおりです。

[
  [3],
  [9,20],
  [15,7]
]

アイデア

基本的な考え方は、結果の保存方法が異なることを除いて、前のトピックと同様です。

コード

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root :
            return []
        q = collections.deque()
        res = []
        q.append(root)
        while q:
            tmp = []
            for _ in range(len(q)):
                t = q.popleft()
                tmp.append(t.val)
                if t.left :
                    q.append(t.left)
                if t.right :
                    q.append(t.right) 
            res.append(tmp)
        return res

剣はオファー32-IIIを指します。バイナリツリーIIIを上から下に印刷します

トピックの説明

二分木をジグザグに印刷する関数を実装してください。つまり、最初の行は左から右の順序で印刷され、2番目のレイヤーは右から左の順序で印刷され、3番目の行は左から印刷されます-右への順序、および他の行など。

サンプル

入力の説明は前のトピックと同じで、
出力の説明は次のとおりです。

[
  [3],
  [20,9],
  [15,7]
]

アイデア

書き込み方法は前のトピックと同様です。2次元配列を格納する場合、行数の添え字に従って左から右または右から左に判断されます。

コード

c++コード

class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    

        queue<TreeNode*> que;
        que.push(root);
        vector<vector<int>> g;
        vector<int> tmp;
        if(!root)return g;
        while(!que.empty()){
    
    
            int len = que.size();
            tmp.clear();
            while(len--){
    
    
                TreeNode* t = que.front();
                que.pop();
                tmp.push_back(t->val);
                if(t->left){
    
    
                    que.push(t->left);
                }
                if(t->right){
    
    
                    que.push(t->right);
                }
            }
            g.push_back(tmp);
        }
        for(int i=1;i<g.size();i+=2){
    
    
            reverse(g[i].begin(),g[i].end());
        }
        return g;
    }
};

Pythonコード

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root :
            return []
        q = collections.deque()
        res = []
        q.append(root)
        i = 0
        while q:
            i = i + 1
            tmp = collections.deque()
            for _ in range(len(q)):
                t = q.popleft()
                if i%2==1 :
                   tmp.append(t.val)
                else :
                    tmp.appendleft(t.val)
                if t.left :
                    q.append(t.left)
                if t.right :
                    q.append(t.right) 
            res.append(list(tmp))
        return res

この記事が私の友達に役立つなら、私はいいねとサポートをしたいと思います〜ありがとうございました〜

ここに画像の説明を挿入


おすすめ

転載: blog.csdn.net/weixin_46627433/article/details/122959376