从上往下打印二叉树(Java实现)

牛客网测试地址:https://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701

  • 空间限制:32768K
  •  算法知识视频讲解
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

package go.jacob.test426;

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

public class Demo2 {
	//循环实现
	public ArrayList PrintFromTopToBottom(TreeNode root) {
		ArrayList list=new ArrayList();
		if(root==null)
			return list;
		
		Queue queue=new LinkedList();
		queue.add(root);
		while(!queue.isEmpty()){
			TreeNode node=queue.remove();
			list.add(node.val);
			if(node.left!=null)
				queue.add(node.left);
			if(node.right!=null)
				queue.add(node.right);
		}
		return list;
	}
	//递归实现
	public ArrayList PrintFromTopToBottom_2(TreeNode root) {
		ArrayList list=new ArrayList();
		Queue queue=new LinkedList();
		if(root==null)
			return list;
		queue.add(root);
		print_2(list,queue);
		return list;
	}
	
	private void print_2(ArrayList list, Queue queue) {
		if(!queue.isEmpty()){
			TreeNode node=queue.remove();
			list.add(node.val);
			if(node.left!=null)
				queue.add(node.left);
			if(node.right!=null)
				queue.add(node.right);
		}else{
			return;
		}
	}



	/*
	 * 错误解法:要把左右子节点压入队列以后才能递归!
	 */
	private void print(TreeNode root,Queue queue,ArrayList list) {
		queue.add(root);
		TreeNode node=null;
		if(!queue.isEmpty()){
			node=queue.remove();
			list.add(node.val);
			if(node.left!=null)
				print(node.left,queue,list);
			if(node.right!=null)
				print(node.right,queue,list);
		}
	}

	public class TreeNode {
	    int val = 0;
	    TreeNode left = null;
	    TreeNode right = null;

	    public TreeNode(int val) {
	        this.val = val;

	    }

	}
}




你可能感兴趣的:(剑指offer(Java实现))