法1:层次遍历
最佳方法,牢记!!!
Python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.rig]ht = right
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if root == None:
return []
res = list()
q = collections.deque()
q.append(root)
while q:
length = len(q)
for i in range(length):
tmp_node = q.popleft()
if tmp_node.left:
q.append(tmp_node.left)
if tmp_node.right:
q.append(tmp_node.right)
if i == length - 1:
res.append(tmp_node.val)
return res
Java
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) {
return res;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while (!q.isEmpty()) {
int size = q.size();
for (int i = 0; i < size; ++i) {
TreeNode tmpNode = q.poll();
if (tmpNode.left != null) {
q.offer(tmpNode.left);
}
if (tmpNode.right != null) {
q.offer(tmpNode.right);
}
if (i == size - 1) {
res.add(tmpNode.val);
}
}
}
return res;
}
}