LeetCode 102. Binary Tree Level Order Traversal

102. Binary Tree Level Order Traversal

二叉樹層序遍歷
考察 BFS 的寫法。
層序遍歷,每行從左到右的方向輸出數組元素。

在這道題的基礎上,還可以擴展出其他類型的層序遍歷,例如 Z 字遍歷。

參考 103. Binary Tree Zigzag Level Order Traversal

這道題屬於必須掌握的題。

Description

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example:
Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

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

Code

下面直接給出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:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if (root == NULL) return {};
        queue<TreeNode*> q;
        q.push(root);
        vector<vector<int>> ret;
        while (!q.empty()) {
            int cur_size = q.size();
            vector<int> tmp;
            for (int i = 0; i < cur_size; i++) {
                TreeNode* node = q.front();
                q.pop();
                tmp.push_back(node->val);
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
            ret.push_back(tmp);
        }
        return ret;
    }
};

分析

咳咳,到了該分析算法的部分了。

空間複雜度[1]:

因爲所有節點都必須被存儲,因此BFS的空間複雜度 O(V+E),其中 V 是節點的數目,而E是邊的數目。

時間複雜度:

當利用BFS搜索時,最壞的情況下要遍歷整棵樹。本題不是搜索,而直接就是輸出整棵樹。因此二者的時間複雜度一樣。O(V+E)。

這部分的複雜度分析,其實我也沒太搞懂,是參考了wiki上的。以後有時間弄明白原理了,再來更新吧

Reference

1.https://zh.wikipedia.org/wiki/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章