두 갈래 나무를 여러 줄로 인쇄하다

2757 단어
제목: 위에서 아래로 층별로 두 갈래 트리를 인쇄하고 같은 층의 결점은 왼쪽에서 오른쪽으로 출력합니다.층마다 줄을 출력합니다.
사고방식: 두 가지 실현 방법: 1.두 개의 대기열을 빌려 층수로 두 개의 대기열을 제어하는offer.2. 각 층 원소의 개수를 통해 대기열의 offer와 새 그룹의 생성을 제어한다.
코드:
public class PrintThree
{
    public ArrayList> Print(TreeNode pRoot) {
        ArrayList> arrayLists = new ArrayList<>();
        if(pRoot == null)
            return arrayLists;

        Queue queue = new LinkedList<>();
        ArrayList arrayList = new ArrayList<>();
        int start = 0;
        int end = 1;
        queue.offer(pRoot);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            start++;
            if(node.left != null)
                queue.add(node.left);
            if(node.right != null)
                queue.add(node.right);

            if(start == end){
                start = 0;
                end = queue.size();
                arrayLists.add(arrayList);
                arrayList = new ArrayList<>();
            }
        }
        return arrayLists;
    }
}
public class PrintTwo
{
    public ArrayList> Print(TreeNode pRoot) {
        ArrayList> arrayLists = new ArrayList<>();
        if(pRoot == null){
            return arrayLists;
        }
        int number = 1;
        // 
        Queue queue1 = new LinkedList<>();
        // 
        Queue queue2 = new LinkedList<>();
        queue1.add(pRoot);

        while(!queue1.isEmpty()||!queue2.isEmpty()){
            if(number % 2 != 0){
                ArrayList arrayList = new ArrayList<>();
                addNode(queue1,queue2,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }else{
                ArrayList arrayList = new ArrayList<>();
                addNode(queue2,queue1,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }
        }
        return arrayLists;
    }
    private void addNode(Queue queue1,Queue queue2,ArrayList arrayList){
        while(!queue1.isEmpty()){
            TreeNode node = queue1.poll();
            arrayList.add(node.val);
            if(node.left != null)
                queue2.add(node.left);
            if(node.right != null)
                queue2.add(node.right);
        }
    }
}

좋은 웹페이지 즐겨찾기