# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def decorateRecord(self, root):
"""
:type root: Optional[TreeNode]
:rtype: List[List[int]]
"""
if not root:
return []
res = []
queue = collections.deque()
queue.append(root)
while queue:
r = []
for _ in range(len(queue)):
tmp = queue.popleft()
r.append(tmp.val)
if tmp.left:
queue.append(tmp.left)
if tmp.right:
queue.append(tmp.right)
res.append(r)
return res
这题比上一题难一点,主要是增加了一个temp列表,感觉这两道题思路虽然不算很复杂,但是代码写起来还是很难的
class Solution {
public List<List> levelOrder(TreeNode root) {
if(root null){
return new ArrayList<>();
}
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
queue.add(root);
while(!queue.isEmpty()){
int k = queue.size();
List<Integer> tmp = new ArrayList<>();
for(int i = 0; i < k; i++){
TreeNode t = queue.poll();
tmp.add(t.val);
if(t.left != null) queue.add(t.left);
if(t.right != null) queue.add(t.right);
}
res.add(tmp);
}
return res;
}
class Solution:
def decorateRecord(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
tmp = []
res = []
tmp.append(root)
while tmp:
tmpapd = []
for _ in range(len(tmp)):
cur = tmp.pop(0)
tmpapd.append(cur.val)
if cur.left: tmp.append(cur.left)
if cur.right: tmp.append(cur.right)
res.append(tmpapd)
class Solution {
public List<List> decorateRecord(TreeNode root) {
List<List> ans = new ArrayList<>();
if(root null) return ans;
Queue queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
List layer = new ArrayList<>();
int len = queue.size();
for(int i = 0; i < len; i++){
TreeNode temp = queue.remove();
layer.add(temp.val);
if(temp.left!=null) queue.add(temp.left);
if(temp.right!=null) queue.add(temp.right);
}
ans.add(layer);
}
return ans;
func decorateRecord(root *TreeNode) [][]int {
var res [][]int
if root == nil { return res }
que := []*TreeNode{root}
for len(que) > 0 {
n := len(que)
var tmp []int
for i := 0; i<n; i++ {
cur := que[i]
tmp = append(tmp, cur.Val)
if cur.Left != nil { que = append(que, cur.Left) }
if cur.Right != nil { que = append(que, cur.Right) }
}
res = append(res, tmp)
que = que[n:]
}
return res
}
共以下 33 个回答
/**> decorateRecord(TreeNode root) { queue = new LinkedList<>();> res = new ArrayList<>();
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List
if(root null)return new ArrayList<>();
Queue
List<List
}
class Solution {> decorateRecord(TreeNode root) { queue = new LinkedList();> res = new ArrayList(); tmp = new ArrayList();
public List<List
Queue
List<List
if(root != null) queue.add(root);
while(!queue.isEmpty()){
List
for(int i=queue.size();i > 0;i–){
TreeNode node = queue.poll();
tmp.add(node.val);
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
res.add(tmp);
}
return res;
}
}时间空间复杂度O(n)
跟上一题差不多,这个需要遍历去除整层元素
class Solution {
public:
};
第n次打卡
day8第二题
时间复杂度:O(N)
“`
这题比上一题难一点,主要是增加了一个temp列表,感觉这两道题思路虽然不算很复杂,但是代码写起来还是很难的> levelOrder(TreeNode root) {
class Solution {
public List<List
if(root null){
return new ArrayList<>();
}
}
时空复杂度O(n)
public List<List> decorateRecord(TreeNode root) { q=new LinkedList<>();> res =new ArrayList<>();tem =new ArrayList<>();
Queue
List<List
if(root null) return res;
q.add(root);
while(!q.isEmpty()){
List
for(int i=q.size();i>0;i–){
TreeNode node = q.poll();
tem.add(node.val);
if(node.left != null) q.add(node.left);
if(node.right != null) q.add(node.right);
}
res.add(tem);
}
return res;
}
思路:在借助队列的基础上 将每一层的数据用临时arraList存起来 通过q.size确定每一层的个数
与I类似,使用BFS遍历二叉树
时间复杂度:O(N),输入N数据,需要执行N次
空间复杂度:O(N)
class Solution {> decorateRecord(TreeNode* root) { > res; tmp;
public:
vector<vector
queue<TreeNode*> que; // 每次循环存放一层的节点
vector<vector
if(root != NULL) que.push(root);
while(!que.empty()) {
vector
for(int i = que.size(); i > 0; –i) {
root = que.front();
que.pop();
tmp.push_back(root->val);
if(root->left != NULL) que.push(root->left);
if(root->right != NULL) que.push(root->right);
}
res.push_back(tmp);
}
return res;
}
};
打卡
II. 从上到下打印二叉树java
java> decorateRecord(TreeNode root) { queue = new LinkedList<>();> res = new ArrayList<>(); tmp = new ArrayList<>();
class Solution {
public List<List
Queue
List<List
if(root != null) queue.add(root);
while(!queue.isEmpty()){
List
for(int i = queue.size(); i > 0; i–){
TreeNode node = queue.poll();
tmp.add(node.val);
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
res.add(tmp);
}
return res;
}
}
时间复杂度 O(N)
空间复杂度 O(N)
时间复杂度$O(n)$,这题注意在本层开始前,队列内都是本层节点,算队列长度就知道本层节点数,从而可以分层遍历
时间复杂度O(n)
层序遍历的变形
class Solution {> decorateRecord(TreeNode* root) { >res;
public:
vector<vector
vector<vector
queue<TreeNode*>que;
if(rootnullptr)return res;
que.push(root);
};
时间复杂度:O(N)
空间复杂度:O(N)
打卡
class Solution {> decorateRecord(TreeNode* root) { > ret; tmp;
public:
vector<vector
vector<vector
if (root nullptr) return ret;
queue<TreeNode*> que;
que.push(root);
while (!que.empty()){
int i = que.size();
vector
while (i > 0){
TreeNode *node = que.front();
que.pop();
tmp.push_back(node->val);
if (node->left) que.push(node->left);
if (node->right) que.push(node->right);
–i;
}
ret.push_back(tmp);
}
return ret;
}
};时空复杂度O(N)
Definition for a binary tree node.
class TreeNode:
def init(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def decorateRecord(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
tmp = []
res = []
tmp.append(root)
while tmp:
tmpapd = []
for _ in range(len(tmp)):
cur = tmp.pop(0)
tmpapd.append(cur.val)
if cur.left: tmp.append(cur.left)
if cur.right: tmp.append(cur.right)
res.append(tmpapd)
双o n
/**> decorateRecord(TreeNode root) { > res = new LinkedList<>();
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List
List<List
if(root null) return new LinkedList<>();
}
时空复杂度O(n)
class Solution {> decorateRecord(TreeNode root) { > ans = new ArrayList<>(); queue = new LinkedList<>(); layer = new ArrayList<>();
public List<List
List<List
if(root null) return ans;
Queue
queue.add(root);
while(!queue.isEmpty()){
List
int len = queue.size();
for(int i = 0; i < len; i++){
TreeNode temp = queue.remove();
layer.add(temp.val);
if(temp.left!=null) queue.add(temp.left);
if(temp.right!=null) queue.add(temp.right);
}
ans.add(layer);
}
return ans;
}
//时空复杂度均为On
时间复杂度O(n)
空间复杂度O(n)
“`C++> decorateRecord(TreeNode* root) {> result; res_sub; sub;
class Solution {
public:
vector
if(root == nullptr)
{
return {};
}
vector
vector
queue
sub.push(root);
while(sub.empty() != true)
{
};
“`
class Solution {> decorateRecord(TreeNode root) { > res=new ArrayList<>(); queue=new LinkedList<>(); list_res=new ArrayList<>();
public List<List
List<List
if(rootnull)
{
return res;
}
Queue
queue.offer(root);
int count=queue.size();
while(!queue.isEmpty())
{
List
for(int i=0;i<count;i++)
{
TreeNode node=queue.poll();
list_res.add(node.val);
if(node.left!=null)
queue.offer(node.left);
if(node.right!=null)
queue.offer(node.right);
}
count=queue.size();
res.add(list_res);
}
return res;
}
}
层次遍历,记录每一层的遍历数量,单独用list存储。
class Solution {> decorateRecord(TreeNode* root) {> ans; tmp; cur = q.front();
public:
vector<vector
queue<TreeNode> q;
vector<vector
if(!root) return ans;
q.push(root);
while(!q.empty()){
vector
for(int i = q.size(); i > 0; i –){//需要从过后往前
TreeNode
q.pop();
tmp.push_back(cur->val);
if(cur->left != nullptr) q.push(cur->left);
if(cur->right != nullptr) q.push(cur->right);
}
ans.push_back(tmp);
}
return ans;
}
};
思路:层序遍历