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

1649 단어

제목 설명


함수는 지그재그로 두 갈래 트리를 인쇄합니다. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로, 다른 줄은 이와 같이 인쇄합니다.
import java.util.ArrayList;
import java.util.Stack;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
	ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
		ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
		if(pRoot==null) return result;
		Stack<TreeNode> stack1 = new Stack<TreeNode>();
		Stack<TreeNode> stack2 = new Stack<TreeNode>();
		boolean flag = true;
		stack1.add(pRoot);
		ArrayList<Integer> start = new ArrayList<Integer>();
		start.add(pRoot.val);
		result.add(start);
		do{			
			ArrayList<Integer> temp = new ArrayList<Integer>();
			if(flag){
				while(stack1.size()!=0){					
					TreeNode t = stack1.pop();					
					if(t.right!=null){
						stack2.add(t.right);
						temp.add(t.right.val);
					}
					if(t.left!=null){
						stack2.add(t.left);
						temp.add(t.left.val);
					}
				}				
			}else{
				while(stack2.size()!=0){
					TreeNode t = stack2.pop();
					if(t.left!=null){
						stack1.add(t.left);
						temp.add(t.left.val);
					}
					if(t.right!=null){
						stack1.add(t.right);
						temp.add(t.right.val);
					}
				}				
			}			
			if(temp.size()!=0)
				result.add(temp);
			flag = !flag;
		}while(stack1.size()!=0||stack2.size()!=0);		
		return result;
	}

}

좋은 웹페이지 즐겨찾기