[Leetcode学习-java]Binary Tree Zigzag Level Order Traversal(Z型遍历二叉树)

问题:

难度:easy

说明:

输入一个二叉树,然后Z型遍历,就是先一次正向遍历,然后再一次反向遍历,如此类推。

问题链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

相关问题:

Binary Tree Level Order Traversal & Binary Tree Level Order Traversal II(遍历二叉树):https://blog.csdn.net/qq_28033719/article/details/107104863

输入案例:

For example:
Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
return its zigzag level order traversal as:
[
  [3],
  [20,9],
  [15,7]
]

我的代码:

其实也是遍历而已,用双栈(滚动数组)最快,毕竟使用 BFS 处理,然后就100%RT。

class Solution {
    // 双栈指针
    private static int cur = 1;
    private static int pre = 0;
    // 两个栈各自的 top 标记
    private static int curTop = 0;
    private static int preTop = 0;
    // 弄个滚动数组
    private static TreeNode[][] towStack = new TreeNode[2][(int)Math.pow(2,11)];
    
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        // 顺序遍历标记, true 正向, false 反向
        boolean dir = true;

        // 结果集
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        // 加入队列
        if(root != null) towStack[cur][curTop ++] = root;

        // 然后一样进行遍历处理即可
        while(curTop != 0) {
            List<Integer> list = new ArrayList<Integer>();
            int size = curTop;
            if(dir)
                for(int i = size;i -- > 0;) {
                    TreeNode node = towQueue[cur][i];
                    list.add(node.val);
                    if(node.left != null) towStack[pre][preTop ++] = node.left;
                    if(node.right != null) towStack[pre][preTop ++] = node.right;
                }
            else
                for(int i = size;i -- > 0;) {
                    TreeNode node = towStack[cur][i];
                    list.add(node.val);
                    if(node.right != null) towStack[pre][preTop ++] = node.right;
                    if(node.left != null) towStack[pre][preTop ++] = node.left;
                }
            curTop = preTop;
            preTop = 0;
            dir = !dir;
            cur ^= 1;
            pre ^= 1;
            res.add(list);
        }
        curTop = 0;
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_28033719/article/details/107528770