leetcode — binary-tree-zigzag-level-order-traversal
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * Source : https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
 *
 *
 * Given a binary tree, return the zigzag level order traversal of its nodes' values.
 * (ie, from left to right, then right to left for the next level and alternate between).
 *
 * For example:
 * Given binary tree {3,9,20,#,#,15,7},
 *
 *     3
 *    / \
 *   9  20
 *     /  \
 *    15   7
 *
 * return its zigzag level order traversal as:
 *
 * [
 *   [3],
 *   [20,9],
 *   [15,7]
 * ]
 */
public class BinaryTreeZigzagLevelOrderTraversal {
    /**
     *
     * 按层次输出树,两层之间要首尾相接
     *
     * 类似之前那个binarytree level order traversal,使用两个list来完成
     * 只需要在添加子节点的时候判断是否需要倒序即可
     * 如果需要的话则先添加右子节点,再添加左子节点
     *
     * @param root
     * @return
     */
    public List<List<Integer>> zigzagOrder (TreeNode root) {
         List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (root == null) {
            return result;
        }
        List<TreeNode> curList = new ArrayList<TreeNode>();
        List<TreeNode> nextList = new ArrayList<TreeNode>();
        curList.add(root);
        boolean isReverse = true;
        while (curList.size() > 0) {
            List<Integer> list = new ArrayList<Integer>();
            for (int i = 0; i < curList.size(); i++) {
                TreeNode node = curList.get(i);
                if (node == null) {
                    continue;
                }
                list.add(node.value);
                if (isReverse) {
                    nextList.add(node.rightChild);
                    nextList.add(node.leftChild);
                } else {
                    nextList.add(node.leftChild);
                    nextList.add(node.rightChild);
                }
            }
            if (list.size() > 0) {
                result.add(list);
            }
            curList.clear();
            curList.addAll(nextList);
            nextList.clear();
            isReverse = !isReverse;
        }
        return result;
    }
    public static void print (List<List<Integer>> lists) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("[\n");
        for (int i = 0; i < lists.size(); i++) {
            buffer.append(Arrays.toString(lists.get(i).toArray(new Integer[lists.get(i).size()])));
            buffer.append(",\n");
        }
        if (lists.size() > 0) {
            buffer.deleteCharAt(buffer.length()-2);
        }
        buffer.append("]");
        System.out.println(buffer.toString());
    }
    public TreeNode createTree (char[] treeArr) {
        TreeNode[] tree = new TreeNode[treeArr.length];
        for (int i = 0; i < treeArr.length; i++) {
            if (treeArr[i] == '#') {
                tree[i] = null;
                continue;
            }
            tree[i] = new TreeNode(treeArr[i]-'0');
        }
        int pos = 0;
        for (int i = 0; i < treeArr.length && pos < treeArr.length-1; i++) {
            if (tree[i] != null) {
                tree[i].leftChild = tree[++pos];
                if (pos < treeArr.length-1) {
                    tree[i].rightChild = tree[++pos];
                }
            }
        }
        return tree[0];
    }
    private class LevelNode {
        TreeNode node;
        int level;
        public LevelNode(TreeNode node, int level) {
            this.node = node;
            this.level = level;
        }
    }
    private class TreeNode {
        TreeNode leftChild;
        TreeNode rightChild;
        int value;
        public TreeNode(int value) {
            this.value = value;
        }
        public TreeNode() {
        }
    }
    public static void main(String[] args) {
        BinaryTreeZigzagLevelOrderTraversal traversal = new BinaryTreeZigzagLevelOrderTraversal();
        char[] arr = new char[]{'3','9','2','#','#','1','7'};
        TreeNode tree = traversal.createTree(arr);
        print(traversal.zigzagOrder(tree));
    }
}
												
											leetcode — binary-tree-zigzag-level-order-traversal的更多相关文章
- [LeetCode] Binary Tree Zigzag Level Order Traversal  二叉树的之字形层序遍历
		
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
 - [leetcode]Binary Tree Zigzag Level Order Traversal @ Python
		
原题地址:http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 题意: Given a binary tr ...
 - [LeetCode] Binary Tree Zigzag Level Order Traversal
		
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
 - LeetCode :: Binary Tree Zigzag Level Order Traversal  [tree, BFS]
		
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
 - [Leetcode] Binary tree Zigzag level order traversal二叉树Z形层次遍历
		
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
 - leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历
		
// 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...
 - LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)
		
103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...
 - 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告
		
Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...
 - 【leetcode】Binary Tree Zigzag Level Order Traversal
		
Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...
 - Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
		
题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...
 
随机推荐
- On the Optimal Approach of Survivable Virtual Network Embedding in Virtualized SDN
			
Introduction and related work 云数据中心对于虚拟技术是理想的创新地方. 可生存性虚拟网络映射(surviavable virtual network embedding ...
 - [LeetCode] Score After Flipping Matrix 翻转矩阵后的分数
			
We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...
 - 关于分页器border重叠问题
			
.paging li { cursor: pointer; display: inline-block; float: left; box-sizing: border-box; margin-lef ...
 - kvm虚拟机克隆
			
1.先关闭被克隆的虚拟机: 2.克隆命令 virt-clone -o 192.168.0.242_sw_web -n 192.168.0.163_nginx -f /data/kvm/images/1 ...
 - swust oj 1011
			
二叉排序树的实现和查找 1000(ms) 10000(kb) 2782 / 6301 按照给定的关键字集合,建立二叉排序树.在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数: ...
 - python—字符串格式化
			
字符串格式化 1.% 百分号 ### %s 字符串传值(任何类型的值) ### %d 只能接受数字 print('我是%s,年龄%d' %('刚刚',23) ) ### 我是刚刚,年龄23 print ...
 - Java script 逻辑运算符
			
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a 1.只要“&&”前面是false,无论“&& ...
 - SSIS - 6.序列容器和优先约束
			
一.多样的优先约束(看例子) 1)打开一个空白的SSIS包,拖拽4个脚本任务到设计面板上,重命名后连接起来,如下图所示. 2)执行包,可以看到任务执行成功.之后我们改变C和D之间的优先约束为“失败”. ...
 - 巧妙设置Texture Type,将ShadowMask内存占用变成之前的1/4
			
0x00 前言 在这篇文章中,我选择了过去一周Unity官方社区交流群中比较有代表性的几个问题,总结在这里和大家进行分享.同时,也欢迎大家加入我们这个讨论干货的官方技术群,交流看法分享经验. Unit ...
 - [BlueZ] 2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙低功耗设备
			
星期三, 05. 九月 2018 02:03上午 - beautifulzzzz 1.前言 上一篇讲了如何编译安装BlueZ-5,本篇主要在于玩BlueZ,用命令行去操作BLE设备: [BlueZ] ...