69 - 二叉树的层次遍历

3.31

当把一个对象的值,赋给另外一个对象的时候,只是赋值地址。也就是说,二者是指向同一片内存区域的。

如果要创建两个不同的对象,可以使用clone这个函数。

在这个问题上确实困扰了很久

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Level order a list of lists of integer
     */
    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
			//用来存放最后的结果
			ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
			//队列 用来遍历
			LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
			//用来存放每一层的结果
			ArrayList<Integer> tmp = new ArrayList<Integer>();
			if(root == null){
				return list;
			}
			queue.addLast(root);
			TreeNode bt = root;
			TreeNode flag = root;
			//list.add(null);
			//System.out.print(list.size());
			while(!queue.isEmpty()){
				bt = queue.pop();
				tmp.add(bt.val);
				if(bt.left != null){
					queue.addLast(bt.left);
				}
				if(bt.right != null){
					queue.addLast(bt.right);
				}
				if(!queue.isEmpty() && bt ==flag){
				    // 不可以直接使用这种形式 add = tmp;因为会指向同一片内存,然后tmp.clear就为空了。
					ArrayList<Integer> add = (ArrayList<Integer>)tmp.clone();
					list.add(add);
					//add = (ArrayList<Integer>)tmp.clone();
					tmp.clear();
					flag = queue.getLast();	
				}
			}
			list.add(tmp);
			
			return list;// write your code here
		}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值