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 + " ");
        }
    }              

猜你喜欢

转载自blog.csdn.net/zhumingyuan111/article/details/80373603