您的位置:首页 > 其它

【树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;
}

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