LeetCode 102. Binary Tree Level Order Traversal

来源:互联网 发布:js清空input的value值 编辑:程序博客网 时间:2024/06/10 14:42

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

原创粉丝点击