LeetCode199 二叉树的右视图
这道题是一道关于二叉树的题,解题方法主要是 dfs(递归)
和 bfs(迭代)
,两种方法都有学习的必要。
首先,我们回顾一下二叉树的基本知识。
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
dfs:
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new LinkedList<>();
rightView(root, 0, list);
return list;
}
private void rightView(TreeNode root, int level, List<Integer> list) {
if (root != null) {
if (list.size() == level) {
list.add(root.val);
}
rightView(root.right, level + 1, list);
rightView(root.left, level + 1, list);
}
}
}
bfs:
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new LinkedList<>();
if (root == null) {
return list;
}
LinkedList<TreeNode> linkedList = new LinkedList<>();
linkedList.add(root);
while (!linkedList.isEmpty()) {
int size = linkedList.size();
while (size > 0) {
//由于加入时是按照从左往右来加的,先删左节点,最后剩下的就是这一层的最右节点
TreeNode temp = linkedList.removeFirst();
if (size == 1) {
list.add(temp.val);
}
//先加入左节点,后加右节点
if (temp.left != null) {
linkedList.add(temp.left);
}
if (temp.right != null) {
linkedList.add(temp.right);
}
size--;
}
}
return list;
}
}