Coding Interview:打印二叉樹的邊界節點

問題描述:
給定一顆二叉樹的頭節點,按照如下規則逆時針打印邊界節點。
規則:
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 + " ");
        }
    }              
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章