题目描述
- 挺简单的,直接看思路代码吧。
思路 & 代码
- 就是一个层序遍历,取每层的最右边结点即可
/**
* 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 {
List<Integer> ans = new ArrayList<>();
LinkedList<TreeNode> queue = new LinkedList<>();
public List<Integer> rightSideView(TreeNode root) {
if(root == null){
return ans;
}
queue.addLast(root);
levelFind(1);
return ans;
}
void levelFind(int nodeNums){
if(nodeNums == 0){
return;
}
TreeNode now = null;
int nextNums = 0;
for(int i = 0; i < nodeNums; i++){
now = queue.removeFirst();
if(now.left != null){
queue.addLast(now.left);
nextNums++;
}
if(now.right != null){
queue.addLast(now.right);
nextNums++;
}
}
ans.add(now.val);
levelFind(nextNums);
}
}