算法题:从右边看被遮挡的二叉树,求露出的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; } }