package com.算法专练.力扣.二叉树的右视图;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* @author xnl
* @Description:
* @date: 2022/7/22 23:33
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
}
/**
* 深度优先,找出最后出现的节点
*/
List<Integer> list = new ArrayList<>();
public List<Integer> rightSideView(TreeNode root) {
dfs(root, 0);
return list;
}
private void dfs(TreeNode node,int depth){
if (node == null){
return;
}
if (depth == list.size()){
list.add(node.val);
}
depth++;
dfs(node.right, depth);
dfs(node.left, depth);
}
/**
* 使用广度优先
* @param root
* @return
*/
public List<Integer> bfs(TreeNode root) {
if (root == null){
return new ArrayList<>();
}
Queue<TreeNode> queue = new LinkedList<>();
List<Integer> list = new ArrayList<>();
queue.offer(root);
while (!queue.isEmpty()){
int size = queue.size();
for (int i = 0; i < size; i++){
TreeNode node = queue.poll();
if (node.left != null){
queue.add(node.left);
}
if (node.right != null){
queue.add(node.right);
}
// 每一层的最后一个,就是我们想要的结果啦
if (i == size - 1){
list.add(node.val);
}
}
}
return list;
}
}
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;
}
}
力扣:199. 二叉树的右视图
于 2022-07-22 23:56:50 首次发布