Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:微信端口是什么 编辑:程序博客网 时间:2024/05/16 19:41

1.题目

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

给出一棵二叉树 {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

返回其锯齿形的层次遍历为:

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

2.算法

同时维护新旧两个栈,一个来读取,一个存储下一层结点,当为偶数层时,从左孩子存储,当为奇数层时,从右孩子存储,


    public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root)     {        // write your code here    ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();    if (root == null)    {    return res;    }    LinkedList<TreeNode> stack = new LinkedList<TreeNode>();    ArrayList<Integer> item = new ArrayList<Integer>();    item.add(root.val);    res.add(item);    stack.push(root);    int level = 1;    while (!stack.isEmpty())    {        LinkedList<TreeNode> newStack = new LinkedList<TreeNode>();        item = new ArrayList<Integer>();        while (!stack.isEmpty())        {        TreeNode node = stack.pop();        if (level % 2 == 0)        {        if (node.left != null)        {            newStack.push(node.left);            item.add(node.left.val);        }        if (node.right != null)        {            newStack.push(node.right);            item.add(node.right.val);        }        }        else        {        if (node.right != null)        {            newStack.push(node.right);            item.add(node.right.val);        }        if (node.left != null)        {            newStack.push(node.left);            item.add(node.left.val);        }        }        }        level++;        if (item.size() > 0)        {        res.add(item);        }        stack = newStack;    }    return res;    }

原帖地址

http://blog.csdn.net/linhuanmars/article/details/24509105

0 0
原创粉丝点击