问题描述:
给定一颗二叉树的头节点,按照如下规则逆时针打印边界节点。
规则:
1.头节点为边界节点
2.叶节点为边界节点
3.如果节点在其所在的层中是最左或者最右的,也是边界节点。
解题思路
使用层次遍历,如果是一层开始的节点则直接打印,如果是一层中最后一个节点,则直接暂存起来,如果是叶子节点则直接打印,最后在逆序打印出暂存的节点。
static class Node{
Node left;
Node right;
int val;
Node(int val){
this.val = val;
}
}
void printEdgeNode(Node root){
List<Node> rightEdgeNodes = new ArrayList<>();
Queue<Node> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0;i<size;i++){
Node cur = queue.poll();
if(cur.left!=null){
queue.add(cur.left);
}
if(cur.right!=null){
queue.add(cur.right);
}
if(i==0){
System.out.print(cur.val + " ");
} else if(i==size-1){
rightEdgeNodes.add(cur);
} else if(cur.left==null && cur.right==null){
System.out.print(cur.val + " ");
}
}
}
for(int i=rightEdgeNodes.size()-1;i>=0;i--){
System.out.print(rightEdgeNodes.get(i).val + " ");
}
}