題目鏈接:https://leetcode-cn.com/problems/binary-tree-right-side-view/
給定一棵二叉樹,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
示例:
題目思路:
- 層序遍歷二叉樹。只有這樣遍歷才能容易得到最右視圖
- 層序遍歷過程中,每次遍歷開始隊列中元素個數就是二叉樹每層的節點數量。知道這一點,很容易得到每一層最右邊的那個節點元素值。
- 每層的最右邊的元素值的數組集合就是答案
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new LinkedList<>();
if (root == null){
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while ( ! queue.isEmpty()){
int count = queue.size(); // 每層的節點個數
int temp = 0;
while(count > 0){
TreeNode node = queue.poll();
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
temp = node.val; // 取每層的最後一個結點
count--;
}
res.add(temp);
}
return res;
}
}