검지 Offer56 - 지그재그 순서로 두 갈래 나무 인쇄

11162 단어 검지 Offer
함수는 지그재그로 두 갈래 트리를 인쇄합니다. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로, 다른 줄은 이와 같이 인쇄합니다.
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
 
    public TreeNode(int val) {
        this.val = val;
    }
}
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
        if(pRoot==null)
            return list;
        Stack<TreeNode> oddStack=new Stack<>();
        Stack<TreeNode> evenStack=new Stack<>();
        oddStack.add(pRoot);
        boolean flag=true;
        while(!(oddStack.isEmpty()&&evenStack.isEmpty())){
            ArrayList<Integer> temp=new ArrayList<>();
            if(flag==true){// ,odd even
                while(!oddStack.isEmpty()){
                    TreeNode t=oddStack.peek();
                    temp.add(t.val);
                    if(t.left!=null){
                        evenStack.add(t.left);
                    }
                    if(t.right!=null){
                        evenStack.add(t.right);
                    }
                    oddStack.pop();
                }
                list.add(temp);
                flag=false;
            }else{// ,even odd
                while(!evenStack.isEmpty()){
                    TreeNode t=evenStack.peek();
                    temp.add(t.val);
                    if(t.right!=null){
                        oddStack.add(t.right);
                    }
                    if(t.left!=null){
                        oddStack.add(t.left);
                    }
                    evenStack.pop();
                }
                list.add(temp);
                flag=true;
            }
        }
        return list;
    }
}

좋은 웹페이지 즐겨찾기