T57:把二叉树打印成多行(Java)

题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

分析:很明显可以利用队列 先进先出 但题目要求是每一层输出一行 这才是题目的关键。于是应该增加2个变量 来记录队列的长度和当前打印数。

int count =0 ,int len =s.size();

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/*
 * 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
 */
public class Print2 {
	public class TreeNode {
	    int val = 0;
	    TreeNode left = null;
	    TreeNode right = null;

	    public TreeNode(int val) {
	        this.val = val;
	    }
	}
	 ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
		 
		 ArrayList<ArrayList<Integer> > list =new ArrayList<ArrayList<Integer> >();
		 if(pRoot==null){
			 return list;
		 }
		 Queue<TreeNode> s=new LinkedList<TreeNode>();
		 s.add(pRoot);
		 int len =s.size();int count=0;
		 while(!s.isEmpty()){
			 ArrayList<Integer> temp=new ArrayList<Integer>();
			 count =0;len=s.size();
			 while(count<len){
				 TreeNode node =s.remove();
				  temp.add(node.val);
				  if(node.left!=null){
				  s.add(node.left);}
				  if(node.right!=null){
				  s.add(node.right);}
                  count++;
			 }
			 if(!temp.isEmpty()){
				 list.add(temp); 
			 }
		 }
		return list;
		    
	    }
}

还可以使用递归:请参考https://blog.csdn.net/ouyangyanlan/article/details/72876335

猜你喜欢

转载自blog.csdn.net/qq_40516725/article/details/84990225