“`java
每一层找出最右侧的即可
class Solution {
public List rightSideView(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List res = new ArrayList<>();
Queue queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int n = queue.size();
for (int i = 0; i < n; i++) {
TreeNode node = queue.poll();
if (i == n - 1) {
res.add(node.val);
}
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
}
return res;
}
}
“`java
class Solution {
public List rightSideView(TreeNode root) {
if(root==null){
return new ArrayList();
}
List l = new ArrayList();
Queue q = new LinkedList();
q.offer(root);
while(!q.isEmpty()){
int s = q.size();
# 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 rightSideView(self, root: Optional[TreeNode]) -> List[int]:
res = []
if not root:
return res
q = [root]
while q:
level_size = len(q)
for i in range(level_size):
node = q.pop(0)
if i == level_size - 1:
res.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return res
共以下 30 个回答
“`java rightSideView(TreeNode root) { res = new ArrayList<>(); queue = new LinkedList<>();
每一层找出最右侧的即可
class Solution {
public List
if (root == null) {
return new ArrayList<>();
}
List
Queue
queue.add(root);
while (!queue.isEmpty()) {
int n = queue.size();
for (int i = 0; i < n; i++) { TreeNode node = queue.poll(); if (i == n - 1) { res.add(node.val); } if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } } return res; } }
“`java rightSideView(TreeNode root) { l = new ArrayList(); q = new LinkedList();
class Solution {
public List
if(root==null){
return new ArrayList();
}
List
Queue
q.offer(root);
while(!q.isEmpty()){
int s = q.size();
}
使用层序遍历
“`java rightSideView(TreeNode root) { result=new ArrayList (); q= 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
if(root==null ) return result;
// 改用广度优先算法 。
// 1.遍历每一层,然后拿出最后一个
Queue
q.add(root);
}
}
“`cpp rightSideView(TreeNode* root) { res; que;
可以深度优先去最后一个
vector
vector
if(root ==NULL) return res;
auto flag = root;
queue
que.push(root);
while(!que.empty())
{
int size = que.size();
while(size–)
{
TreeNode* node = que.front();
if(0 == size)
{
res.push_back(node->val);
}
que.pop();
if(node->left!=NULL) que.push(node->left);
if(node->right!=NULL) que.push(node->right);
}
}
return res;
}
“`cpp
【思路】BFS遍历二叉树,result即为每一层的最右侧节点组成的列表
【复杂度】时间复杂度O(n),空间复杂度O(n)
用层序遍历二叉树每次将最右边的节点记录
这段代码是一个解决二叉树右视图问题的程序。
它通过深度优先搜索(DFS)的方式遍历二叉树,先遍历右子树再遍历左子树。
在遍历过程中,如果当前层还未插入到结果数组res中(说明当前节点为当层最右节点),则将当前节点的值插入到res中。
还可以广度优先(BFS),利用队列进行层序遍历,最后访问的节点即为最右节点
时间复杂度都为O(n),空间复杂度为O(n)
广度优先思路
复杂度
Code
和层序遍历比较相似,每一层的最后一个即为右视角所看到的
时间复杂度为O(n), 遍历了每一个节点
空间复杂度为O(n)
思路:层序遍历,每一层最后一个加入列表,即为右视图
时间复杂度:O(n) 空间复杂度:O(n)
层序遍历
bfs
时间:O(n)
空间:O(n)
dfs
时间:O(n)
空间:O(n)
MY层序遍历
层次遍历,一层一层的取最右节点。
时间复杂度:O(n)
空间复杂度:O(n)
一开始思维局限在从上往下打印,一直想不出来。后来看了讲解发现是按层遍历,打印每层最后一个,思想跟day8做的剑指 Offer 32 – II. 从上到下打印二叉树 类似
时间复杂度:O(N)
空间复杂度:O(N)
BFS
C++实现
使用queue实现
复杂度O(n)
时间复杂度:O(n)
层序遍历:时间复杂度O(n) 空间复杂度O(n)
c++层序遍历直接解决 rightSideView(TreeNode* root) { result;
vector
vector
queue<TreeNode> que;
if(root!=NULL)que.push(root);
while(!que.empty())
{
TreeNode temp;
int len = que.size();
for(int i = 0;i<len;i++)
{
temp= que.front();
que.pop();
if(ilen-1)
{
result.push_back(temp->val);
}
if(temp->left)que.push(temp->left);
if(temp->right)que.push(temp->right);
}
}
return result;
}