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