“`java
一个字,层序遍历
class Solution {
public int[] decorateRecord(TreeNode root) {
List list = new ArrayList<>();
if (root == null) {
return new int[0];
}
Queue q = new LinkedList<>();
q.add(root);
while(!q.isEmpty()) {
TreeNode node = q.poll();
list.add(node.val);
if (node.left != null) {
q.add(node.left);
}
if (node.right != null) {
q.add(node.right);
}
}
int[] res = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
res[i] = list.get(i);
}
return res;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null){
return new int[0];
}
List<Integer> res = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
TreeNode node = q.poll();
res.add(node.val);
if(node.left!=null){q.offer(node.left);}
if(node.right!=null){q.offer(node.right);}
}
int[] res_1 = new int[res.size()];
for(int i=0;i<res.size();i++){
res_1[i] = res.get(i);
}
return res_1;
}
“`java
public int[] levelOrder(TreeNode root) {
if (root==null) {
return new int[0];
}
// 使用队列
Queue queue= new LinkedList();
List result=new ArrayList();
“`java
class Solution{
public int[] levelOrder(TreeNode root){
if(root == null){
return new int[0];
}
Queue queue = new LinkList<>();
List res = new ArrayList<>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode t = queue.poll();
res.add(t.val);
if(t.left!=null) queue.add(t.left);
if(t.right!=null) queue.add(t.right);
}
int[] arr = new int[res.size()];
for(int i =0;i
# 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
from collections import deque
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
res = []
if not root:
return res
queue = deque([root])
while queue:
cnt = len(queue)
level = []
for i in range(cnt):
cur = queue.popleft()
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
res.append(level)
return res
class Solution {
public int[] levelOrder(TreeNode root) {
if (null root) return new int[0];
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
List<Integer> res = new ArrayList<>();
while (!queue.isEmpty()) {
TreeNode t = queue.poll();
res.add(t.val);
if (null != t.left) queue.add(t.left);
if (null != t.right) queue.add(t.right);
}
int[] ans = new int[res.size()];
for (int i = 0; i < res.size(); i++){
ans[i] = res.get(i);
}
return ans;
}
共以下 44 个回答
“`java list = new ArrayList<>(); q = new LinkedList<>();
一个字,层序遍历
class Solution {
public int[] decorateRecord(TreeNode root) {
List
if (root == null) {
return new int[0];
}
Queue
q.add(root);
while(!q.isEmpty()) {
TreeNode node = q.poll();
list.add(node.val);
if (node.left != null) {
q.add(node.left);
}
if (node.right != null) {
q.add(node.right);
}
}
int[] res = new int[list.size()];
for (int i = 0; i < list.size(); i++) { res[i] = list.get(i); } return res; } }
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
}
1111采用队列
“`java queue= new LinkedList (); result=new ArrayList ();
public int[] levelOrder(TreeNode root) {
if (root==null) {
return new int[0];
}
// 使用队列
Queue
List
“`java queue = new LinkList<>(); res = new ArrayList<>();
class Solution{
public int[] levelOrder(TreeNode root){
if(root == null){
return new int[0];
}
Queue
List
queue.add(root);
while(!queue.isEmpty()){
TreeNode t = queue.poll();
res.add(t.val);
if(t.left!=null) queue.add(t.left);
if(t.right!=null) queue.add(t.right);
}
int[] arr = new int[res.size()];
for(int i =0;i
思路:递归
C++实现
时间复杂度O(n),空间复杂度O(n)
通过队列完成层序遍历,然后将每层的数据储存
【思路】用C++ STL queue库的接口完成遍历
【复杂度】时间O(n),空间O(n)
思路:
首先创建一个空的队列和一个空的结果数组。
将根节点入队。
进入循环,直到队列为空。
在每次循环中,取出队首元素,将其值存入结果数组。
如果当前节点有左子节点,则将左子节点入队。
如果当前节点有右子节点,则将右子节点入队。
循环结束后,返回结果数组。
这段代码实现了对二叉树进行层次遍历,即从上到下逐层遍历二叉树的节点,并将节点的值按顺序存储在结果数组中。
通过使用队列来辅助实现层次遍历,可以保证先遍历父节点,再遍历子节点,从而保证了层次遍历的顺序性。
队列
遍历了每个节点时间复杂度O(N), 使用队列和ArrayList空间复杂度O(N)
思路:层序遍历,使用队列作为辅助数据结构
时间复杂度O(n) 空间复杂度O(n)
时间复杂度为O(n)
空间复杂度为O(1)
bfs
时间:O(n)
空间:O(n)
队列
时间复杂度O(n) 空间复杂度O(n)
思路
代码
class Solution { levelOrder(TreeNode* root) { res;
public:
vector
vector
queue<TreeNode> q;
if(rootnullptr){
return res;
}
q.push(root);
while(!q.empty()){
TreeNode node = q.front();
q.pop();
res.push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
return res;
}
};
时间复杂度O(n)
空间复杂度O(n)
时间复杂度O(n)
空间复杂度O(n)
层序遍历
记得import
核心思想,拿一个,放两个(该节点的左右节点)
时间复杂度:O(N)
额外空间复杂度:O(N)
c++层序遍历 levelOrder(TreeNode* root) { result;
vector
vector
queue<TreeNode> que;
if(rootNULL)return result;
que.push(root);
while(!que.empty())
{
TreeNode temp;
int len = que.size();
for(int i = 0;i<len;i++)
{
temp = que.front();
que.pop();
result.push_back(temp->val);
if(temp->left!=NULL)que.push(temp->left);
if(temp->right!=NULL)que.push(temp->right);
}
}
return result;
}
C++实现
利用队列,广搜
时间复杂度O(n)
时空复杂度:O(n)
1、用队列存储遍历到的节点、用列表顺序保存遍历的结果,用数组进行最后的输出
2、根节点入队,队列非空是循环,将当前节点入列表
3、判断左子树是否为空,不为空则入队,再同样判断右子树
用队列保存边界的上层节点
时间复杂度:O(n)
空间复杂度:O(n)
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public int[] levelOrder(TreeNode root) {
if (null root) return new int[0];
}
时间复杂度O(n)
空间复杂度O(n)
复杂度O(n)
每遍历到一个节点(出队),就把其左子和右子先后放入队列中,这样最后的效果就是层序遍历
空间复杂度O(n)(一个完全二叉树最后可以有 (n+1)/2 个点在同一层),时间复杂度O(n)
复杂度O(height) O(n)
复杂度
时间复杂度: $O(n)$
空间复杂度: $O(n)$
Code
class Solution {
public int[] levelOrder(TreeNode root) {
if(root null){
return new int[0];
}
}
时间复杂度:O(n)
额外空间复杂度:容器里最多存放 1/2 的节点,故为 O(n)