题干
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
想法
说白了这题就是当有右子树的时候把右子树放进去,否则就放左子树
思路参考了这位大佬
用dep来标记现在已经加入list对应的🌲的最大深度,
dep++ 先加右子树再加左子树
如果没有右子树的情况就加到左子树去了
Java代码
package daily;
import java.util.*;
import util.TreeNode;
public class RightSideView {
List<Integer> res=new ArrayList<>();
int dep=0;
public List<Integer> rightSideView(TreeNode root) {
helper(root,0);
return res;
}
private void helper(TreeNode root,int now){
if(root==null){
return;
}
if(now==dep){
res.add(root.getVal());
dep++;
}
helper(root.getRight(),now+1);
helper(root.getLeft(),now+1);
}
public static void main(String [] args){
RightSideView rightSideView=new RightSideView();
TreeNode root=new TreeNode(1);
TreeNode tem=new TreeNode(2);
TreeNode res=new TreeNode(3);
root.setLeft(tem);
root.setRight(res);
tem.setRight(new TreeNode(5));
res.setRight(new TreeNode(4));
List result=rightSideView.rightSideView(root);
System.out.println(result);
}
}