给定一个二叉树,打印从左边看到的,或者从右边看到的
分析:可以参考广度优先遍历
解法1
public List<Integer> rightSideView(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<Integer> result = new ArrayList<>();
queue.offer(root);
while(!queue.isEmpty()) {
int size = queue.size();
//对每一行操作
while(size > 0) {
TreeNode current = queue.poll();
if (current.left!=null) {
queue.offer(current.left);
}
if (current.right != null) {
queue.offer(current.right);
}
size --;
//表示是每一行的最后一个
if (size == 0) {
result.add(current.value);
}
}
}
return result;
}
解法2 递归
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new ArrayList<>();
rightSideView(root,list,0);
return list;
}
public void rightSideView(TreeNode root, List<Integer> list ,int level) {
if (root == null) {
return;
}
if (level == list.size()) {
list.add(root.val);
}
rightSideView(root.right,list,level+1);
rightSideView(root.left,list,level + 1);
}
打印左视图和右视图相似,只需在加入队列的时候先加入左结点
网友评论