您的位置:首页 > 其它

按之字形顺序打印二叉树

2018-03-13 21:06 316 查看

题目描述

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

/*
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) {
//判断是否为空
if(pRoot==null){
return new ArrayList();
}
//奇偶变量的标志位
int i = 1;
//创建两个栈
//存储偶数层
Stack<TreeNode> stack1 = new  Stack<>();
//存储奇数层
Stack<TreeNode> stack2 = new  Stack<>();
//创建一个接收数据的ArrayList
ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
//先将根节点导入
stack2.push(pRoot);
//如果两个栈都输出则认为空

while(!stack2.empty()||!stack1.empty()){
//如果当前打印的是奇数层,,先保留左子树,因为是栈
if(i%2!=0){
ArrayList<Integer> temp = new ArrayList<Integer>();
while(!stack2.empty()){
TreeNode s2 =  stack2.pop();
temp.add(s2.val);
//存入左子树
if(s2.left!=null)
stack1.push(s2.left);
if(s2.right!=null)
stack1.push(s2.right);
}
list.add(temp);
}
//如果当前打印的是偶数层,,先保留右子树,因为是栈
else{
ArrayList<Integer> temp = new ArrayList<Integer>();
while(!stack1.empty()){
TreeNode s1 =  stack1.pop();
temp.add(s1.val);
//存入左子树
if(s1.right!=null)
stack2.push(s1.right);
if(s1.left!=null)
stack2.push(s1.left);
}
list.add(temp);
}
i++;

}
return list;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: