LeetCode-103.二叉树的锯齿形层次遍历(相关话题:广度优先/栈)

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如: 给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回锯齿形层次遍历如下:

[
  [3],
  [20,9],
  [15,7]
]

Java代码:

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res = new LinkedList<>();

        if(null != root){
            List<Stack<TreeNode>> col = new LinkedList<>();
            Stack<TreeNode> s0 = new Stack<>();
            s0.push(root);
            col.add(s0);
            for(int i = 0; i < col.size(); i++){
                List<Integer> list = new LinkedList<>();
                Stack<TreeNode> s = col.get(i);
                while(!s.isEmpty()){
                    TreeNode t = s.pop();
                    list.add(t.val);
                    if(null != t.left || null != t.right){
                        if(col.size()-1 == i){
                            Stack<TreeNode> si = new Stack<>();
                            col.add(si);
                        }
                        if(0 == i%2){
                            if(null != t.left)
                                col.get(i+1).push(t.left);
                            if(null != t.right)
                                col.get(i+1).push(t.right);
                        } else {
                            if(null != t.right)
                                col.get(i+1).push(t.right);
                            if(null != t.left)
                                col.get(i+1).push(t.left);
                        }
                    }
                }
                res.add(list);
            }
        }

        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38823568/article/details/82982355