LeetCode第102題:二叉樹的層序遍歷(中等)

題目

難度:中等
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
在這裏插入圖片描述

題解

解法1:使用隊列廣度優先遍歷

/**
 * 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>> res;
        if(!root) return res;
        queue<TreeNode*> queue;
        queue.push(root);
        while(!queue.empty()){
            int len = queue.size();
            vector<int> tmp;
            for(int i = 0; i < len; i++){
                TreeNode* node = queue.front();
                queue.pop();
                tmp.push_back(node->val);
                if(node->left) queue.push(node->left);
                if(node->right) queue.push(node->right);
            }
            res.push_back(tmp);
        }
        return res;
    }
};

解法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>> res;
    vector<vector<int>> levelOrder(TreeNode* root) {
        int dep = BTreeDepth(root);
        vector<vector<int>> res1(dep, vector<int>(0));
        this->res = res1;
        backTrack(root, 0);
        return res;
    }
    int BTreeDepth(TreeNode* root){
        return root == NULL ? 0 : max(BTreeDepth(root->left), BTreeDepth( root->right )) + 1;
    }
    void backTrack(TreeNode* root, int n){
        if(root){
            backTrack(root->left, n+1);
            backTrack(root->right, n+1);
            res[n].push_back(root->val);
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章