Leetcodeの問題解決レポートSwordは、オファー32のバイナリツリーシリーズを上から下に印刷することを指します

ソードフィンガーオファー32-I。バイナリツリーを上から下に印刷する

バイナリツリーの各ノードを上から下に印刷し、同じレベルのノードを左から右の順に印刷します。

例えば:

与えられたバイナリツリー:[3,9,20、null、null、15,7]、

    3
   / \
  9  20
    /  \
   15   7

戻り値:

[3,9,20,15,7]

回答:

これは単純なBFSです

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<int> levelOrder(TreeNode* root) {
    
    
        vector<int> ans;
        if(root==nullptr)
            return ans;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
    
    			//BFS模板
            TreeNode *temp=q.front();
            q.pop();
            ans.push_back(temp->val);
            if(temp->left!=nullptr)
                q.push(temp->left);
            if(temp->right!=nullptr)
                q.push(temp->right);
        }
        return ans;

    }
};

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

バイナリツリーは上から下にレイヤーで印刷されます。同じレイヤーのノードは左から右の順序で印刷され、各レイヤーは1行に印刷されます。

例えば:

与えられたバイナリツリー:[3,9,20、null、null、15,7]、

    3
   / \
  9  20
    /  \
   15   7

レベルトラバーサルの結果を返します。

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

回答:

以前のブログでは、トラバーサルはVisit()関数を介してコンソールに出力されました。このトピックは単純なBFSレイヤーシーケンストラバーサルですが、各レイヤーのデータを分離する方が興味深いです。ここでは2次元配列を使用しています。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> ans;
        if(root==nullptr)
            return ans;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
    
    					//BFS模板里面嵌套了每层的操作
            vector<int> t;
            for(int i=q.size();i>0;--i){
    
    
                TreeNode *temp=q.front();
                q.pop();
                t.push_back(temp->val);
                if(temp->left)
                    q.push(temp->left);
                if(temp->right)
                    q.push(temp->right);
            }
            ans.push_back(t);
        }
        return ans;
    }
};

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

バイナリツリーをジグザグに印刷する機能を実装してください。つまり、最初の行は左から右に印刷され、2番目のレイヤーは右から左に印刷され、3番目の行は左から右に印刷されます。その他等々。

例えば:

与えられたバイナリツリー:[3,9,20、null、null、15,7]、

    3
   / \
  9  20
    /  \
   15   7

レベルトラバーサルの結果を返します。

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

回答:

ここでは、Dequeダブルエンドキューが使用されます

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> ans;
        if(root==nullptr)
            return ans;
        deque<TreeNode*> q;
        q.push_back(root);
        bool flag=true;
        while(!q.empty()){
    
    					//BFS模板里面嵌套了每层的操作
            vector<int> t;
            for(int i=q.size();i>0;--i){
    
    
                if(flag){
    
    
                    TreeNode *temp=q.front();
                    q.pop_front();
                    t.push_back(temp->val);
                    if(temp->left!=nullptr)
                        q.push_back(temp->left);
                    if(temp->right!=nullptr)
                        q.push_back(temp->right);
                }else{
    
    
                    TreeNode *temp=q.back();
                    q.pop_back();
                    t.push_back(temp->val);
                    if(temp->right!=nullptr)
                        q.push_front(temp->right);
                    if(temp->left!=nullptr)
                        q.push_front(temp->left);
                }
            }
            flag=!flag;
            ans.push_back(t);
        }
        return ans;
    }
};

おすすめ

転載: blog.csdn.net/qq_43477024/article/details/111773307