您的位置:首页 > 其它

按之字形顺序打印二叉树

2016-09-17 20:41 441 查看
题目描述

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

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,外加一个标志判断要不要逆序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: