問題描述:
給定一顆二叉樹的頭節點,按照如下規則逆時針打印邊界節點。
規則:
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 + " ");
}
}