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>>lists=new ArrayList<ArrayList<Integer>>();
Stack<TreeNode>stack1=new Stack<TreeNode>();//用来存放奇数层结点
Stack<TreeNode>stack2=new Stack<TreeNode>();//用来存放偶数层结点
stack1.push(pRoot);
if(pRoot==null)
return lists;
int ans=1;
while(stack1.empty()==false||stack2.empty()==false){//进行广搜
if(ans==1){//奇数层时
ArrayList<Integer>list=new ArrayList<Integer>();
while(stack1.empty()==false){
TreeNode tree=stack1.peek();
list.add(tree.val);
stack1.pop();
if(tree.left!=null)//按照 先左后右的顺序
stack2.push(tree.left);
if(tree.right!=null)
stack2.push(tree.right);
}
lists.add(list);
}
else{//偶数层
ArrayList<Integer>list=new ArrayList<Integer>();
while(stack2.empty()==false){
TreeNode tree=stack2.peek();
list.add(tree.val);
stack2.pop();
if(tree.right!=null)// 按照先右后左的顺序
stack1.push(tree.right);
if(tree.left!=null)
stack1.push(tree.left);
}
lists.add(list);
}
ans^=1;//标记层数
}
return lists;
}
}
按之字形顺序打印二叉树
最新推荐文章于 2024-02-18 10:31:45 发布