按之字形打印二叉树(Java)

按之字形打印二叉树(Java)

题目
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析
使用两个栈实现:

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root==null)
            return res;
        //
        Stack<TreeNode> stack1 = new Stack<>();
        Stack<TreeNode> stack2 = new Stack<>();
        stack1.add(root);
        //true表示在偶数层, 根节点是第0层
        boolean flag = true;
        while(!stack1.isEmpty() || !stack2.isEmpty()){
            res.add(new ArrayList<>());
            if(flag==true){
                while(!stack1.isEmpty()){
                    TreeNode cur = stack1.pop();
                    res.get(res.size()-1).add(cur.val);
                    if(cur.left!=null)
                        stack2.push(cur.left);
                    if(cur.right!=null)
                        stack2.push(cur.right);
                }
                flag=false;
            }
            else{
                while(!stack2.isEmpty()){
                    TreeNode cur = stack2.pop();
                    res.get(res.size()-1).add(cur.val);
                    if(cur.right!=null)
                        stack1.push(cur.right);
                    if(cur.left!=null)
                        stack1.push(cur.left);
                }
                flag=true;
            }
        }
        return res;
    }
}
发布了71 篇原创文章 · 获赞 0 · 访问量 890

猜你喜欢

转载自blog.csdn.net/sinat_40968110/article/details/105338243