【树12】按之字形顺序打印二叉树
2016-08-23 22:39
375 查看
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推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) {
ArrayList<ArrayList<Integer>> nodesList=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list=new ArrayList<Integer>();
if(pRoot==null)
return nodesList;
int toBePrint=1;//第一层默认为1
//下层将打印的结点数
int nextLevelNodes=0;
int level=1;//首层默认为第一层
Stack<TreeNode> stack1=new Stack<TreeNode>();
Stack<TreeNode> stack2=new Stack<TreeNode>();
stack1.push(pRoot);
while(!stack1.isEmpty() || !stack2.isEmpty()){
//奇数层
if(level%2!=0){
TreeNode tempNode=stack1.pop();
--toBePrint;
list.add(tempNode.val);
if(tempNode.left!=null){
stack2.push(tempNode.left);
++nextLevelNodes;
}
if(tempNode.right!=null){
stack2.push(tempNode.right);
++nextLevelNodes;
}
}else{
TreeNode tempNode=stack2.pop();
--toBePrint;
list.add(tempNode.val);
if(tempNode.right!=null){
stack1.push(tempNode.right);
++nextLevelNodes;
}
if(tempNode.left!=null){
stack1.push(tempNode.left);
++nextLevelNodes;
}
}
if(toBePrint==0){
nodesList.add(list);
level++;
toBePrint=nextLevelNodes;
nextLevelNodes=0;
list=new ArrayList<Integer>();
}
}
return nodesList;
}
}
相关文章推荐
- 剑指offer61 按之字形顺序打印二叉树
- 【59】按之字形顺序打印二叉树
- 剑指offer:按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
- 按之字形顺序打印二叉树
- 剑指offer 按之字形顺序打印二叉树
- 剑指offer(56)-按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 59按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 剑指offer(五十三)之按之字形顺序打印二叉树
- 剑指Offer--061-按之字形顺序打印二叉树
- 按之字形顺序打印二叉树
- 把二叉树打印成多行 按之字形顺序打印二叉树 binary tree zigzag level order traversal
- 剑指offer 61题 【树】按之字形顺序打印二叉树
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- Q21_按之字形顺序打印二叉树
- 按之字形顺序打印二叉树