71. 二叉树的锯齿形层次遍历

该博客介绍了如何实现二叉树的锯齿形层次遍历。通过使用两个栈交替进行左右子节点的添加,可以得到层次间的交错效果。示例中给出了两种不同的二叉树结构,展示了算法的正确输出。代码实现使用了Java,并以列表的形式返回结果。
摘要由CSDN通过智能技术生成

71. 二叉树的锯齿形层次遍历

 

给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 

样例

样例 1:

输入:{1,2,3}

输出:[[1],[3,2]]

解释:

1

/ \

2 3

它将被序列化为 {1,2,3}

样例 2:

输入:{3,9,20,#,#,15,7}

输出:[[3],[20,9],[15,7]]

解释:

3

/ \

9 20

/ \

15 7

它将被序列化为 {3,9,20,#,#,15,7}

 

 /**
     * Definition of TreeNode:
     * public class TreeNode {
     * public int val;
     * public TreeNode left, right;
     * public TreeNode(int val) {
     * this.val = val;
     * this.left = this.right = null;
     * }
     * }
     */

    public class Solution {
        /**
         * @param root: A Tree
         * @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
         */
        public List<List<Integer>> zigzagLevelOrder(TreeNode treeNode) {
            List<List<Integer>> ret = new ArrayList<>();
            if (treeNode == null) return ret;
            Queue<TreeNode> stack = new LinkedList<>();
            stack.add(treeNode);
            boolean flag = true;
            while (!stack.isEmpty()) {
                List<Integer> integerList = new ArrayList<>();
                Queue<TreeNode> stack2 = new LinkedList<>();
                while (!stack.isEmpty()) {
                    treeNode = stack.poll();
                    if (flag) {
                        integerList.add(treeNode.val);
                    } else {
                        integerList.add(0, treeNode.val);
                    }
                    // if (flag) {
                    if (treeNode.left != null) {
                        stack2.add(treeNode.left);
                    }
                    if (treeNode.right != null) {
                        stack2.add(treeNode.right);
                    }
                    // }else {
                    //     if (treeNode.right != null) {
                    //         stack2.add(treeNode.right);
                    //     }
                    //     if (treeNode.left != null) {
                    //         stack2.add(treeNode.left);
                    //     }
                    // }
                }
                if (flag) {
                    flag = false;
                } else {
                    flag = true;
                }
                stack = stack2;
                if (!integerList.isEmpty()) {
                    ret.add(integerList);
                }
            }
            return ret;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值