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

来源:互联网 发布:中国农行软件 编辑:程序博客网 时间:2024/06/05 20:01

牛客网测试地址: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<Integer> PrintFromTopToBottom(TreeNode root) {ArrayList<Integer> list=new ArrayList<Integer>();if(root==null)return list;Queue<TreeNode> queue=new LinkedList<TreeNode>();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<Integer> PrintFromTopToBottom_2(TreeNode root) {ArrayList<Integer> list=new ArrayList<Integer>();Queue<TreeNode> queue=new LinkedList<TreeNode>();if(root==null)return list;queue.add(root);print_2(list,queue);return list;}private void print_2(ArrayList<Integer> list, Queue<TreeNode> 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<TreeNode> queue,ArrayList<Integer> 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;    }}}




0 0