201

问答题 201 /376

算法题:从右边看被遮挡的二叉树,求露出的node

参考答案

参考回答:

import java.util.Deque;
import java.util.LinkedList;
import java.util.List;


//树节点类

class TreeElement {
int val;
TreeElement left;
TreeElement right;
TreeElement(int x) {
val = x;
}
}
public class RightSideView {
public List<Integer> rightSideView(TreeElement root) {
List<Integer> result = new LinkedList<>();
if(root != null) {
Deque<TreeElement> deque = new LinkedList<>();

//当前层的节点数

int current = 1;

//下一层的节点数

int next = 0;
TreeElement node;
deque.addLast(root);
while(deque.size() > 0) {

//取第一个节点

node = deque.removeFirst();
current--;

//添加非空的节点

if(node.left != null) {
next++;
deque.addLast(node.left);
}

//添加非空的节点

if(node.right != null) {
next++;
deque.addLast(node.right);
}

//如果当前层已经处理完了

if(current == 0) {

//保存此层的最右一个节点值

result.add(node.val);

//设置下一层的元素个数

current = next;
next = 0;
}
}
}
return result;
}
}