按之字形顺序打印二叉树

来源:互联网 发布:数控机床模拟仿真软件 编辑:程序博客网 时间:2024/06/16 11:31

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

import java.util.*;/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        ArrayList<ArrayList<Integer> > rst = new ArrayList<ArrayList<Integer> >();        if(pRoot == null) return rst;        int cnt = 1;        Queue<TreeNode> q  = new LinkedList<TreeNode>();        Queue<TreeNode> qq = new LinkedList<TreeNode>();        //Stack<TreeNode> s  = new Stack<TreeNode>();        ArrayList<Integer> list  = new ArrayList<Integer>();        ArrayList<Integer> temp  = new ArrayList<Integer>();        q.add(pRoot);        ArrayList<Integer> first = new ArrayList<Integer>();        first.add(pRoot.val);        rst.add(first);        while(!q.isEmpty()) {            TreeNode p = q.remove();            if(p.left != null) {                qq.add(p.left);                list.add(p.left.val);            }            if(p.right != null) {                qq.add(p.right);                list.add(p.right.val);            }            if(q.isEmpty()) {                if(qq.isEmpty()) return rst;                q = qq;                qq = new LinkedList<TreeNode>();                if(cnt % 2 == 0) {                    rst.add(list);                    list = new ArrayList<Integer>();                } else {                    for(int i=list.size()-1; i>=0; i--)                        temp.add(list.get(i));                    rst.add(temp);                    list = new ArrayList<Integer>();                    temp = new ArrayList<Integer>();                }                cnt ++;            }        }        return rst;    }}

bfs,外加一个标志判断要不要逆序

0 0