一、题目
1、审题
2、分析
一棵二叉树,从右边看他,看到的每一层的第一个元素存起来。
二、解答
1、思路:
方法一、
采用 Queue 进行层次遍历,且每次获取一层的最右边一个元素。
public List<Integer> rightSideView(TreeNode root) { if(root == null) return null; List<Integer> result = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while(!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); if(i == 0) { result.add(node.val); } if(node.right != null) queue.add(node.right); if(node.left != null) queue.add(node.left); } } return result; }
方法二、
采用递归获取每一层最右边元素;
即修改后的前序遍历,遍历顺序为: 根 --> 右 --> 左 ;
巧妙的将所遍历到的层次与 List 中元素的个数进行关联起来。
public List<Integer> rightSideView2(TreeNode root) { List<Integer> result = new ArrayList<>(); rightView(root, result, 0); return result; } private void rightView(TreeNode root, List<Integer> result, int curDepth) { if(root == null) return; if(curDepth == result.size()) result.add(root.val); rightView(root.right, result, curDepth + 1); rightView(root.left, result, curDepth + 1); }