資料結構與演算法第二天(二叉樹刷題)

cqust_麒麟001號發表於2020-11-24

這是本專欄第二篇文章,資料結構與演算法刷題篇

今天做的是LeetCode上二叉樹的一道題,感覺很有意義,所以記錄下來。

劍指 Offer 32 - II. 從上到下列印二叉樹 II

思路:二叉樹的層序遍歷,通過佇列實現。

WA程式碼:

/**
 * 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:
    queue<TreeNode*> q;
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        if(root==NULL)
        return ans;

        q.push(root);
        vector<int>temp;
        while(!q.empty())
        {
            if(q.front()->left)
                q.push(q.front()->left);
            if(q.front()->right)
                q.push(q.front()->right);
            temp.push_back(q.front()->val);
            q.pop();
        }
        ans.push_back(temp);
        return ans;
    }
};

AC程式碼:




/**
 * 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:
    queue<TreeNode*> myQue;
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        if(root==NULL)
        return ans;

        myQue.push(root);
        while(!myQue.empty()){
            vector<int> tmp;
            int size = myQue.size();
            for(;size--;myQue.pop()){
                auto node = myQue.front();
                if(node->left)      myQue.push(node->left);
                if(node->right)     myQue.push(node->right);               
                tmp.push_back(node->val);
            }
            ans.push_back(tmp);
        }
        return ans;
    }
};

兩個程式碼輸出是不同的,後面有時間來寫區別及感想。

相關文章