leetcode 102. Binary Tree Level Order Traversal

算法思路:
二叉树的层次遍历,该算法的重点在于找到每一层次的最后一个结点,初始第一层的最后一个结点last为root,然后将根结点放入队列,以队列不为空的条件循环遍历,设置下一层的最后一个结点为preLast,对于出队的结点的左右结点进行入队操作(前提是入队的结点不为空)并且将入队的结点赋值给preLast,当出队的结点是最后一个结点时,则preLast即为下一层的最后一个结点,然后更新last结点为preLast,将该层遍历的元素加入到list数组中,然后继续遍历,重复这以上过程,直到循环条件为假。

该算法的时间复杂的为O(n),空间复杂度为O(n)。参考代码:

public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> listArray = new ArrayList<List<Integer>>();
        List<Integer> list = new ArrayList<Integer>();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        if(root==null)
        	return listArray;
        TreeNode last = root;
        queue.add(root);
        TreeNode preLast=null;
        while(!queue.isEmpty()){
        	TreeNode pNode = queue.remove();
        	list.add(pNode.val);
        	if(pNode.left!=null){
        		queue.add(pNode.left);
        		preLast = pNode.left;
        	}
        	if(pNode.right!=null){
        		queue.add(pNode.right);
        		preLast = pNode.right;
        	}
        	if(pNode.equals(last)){        		
        		last = preLast;
        		listArray.add(list);
        		list = new ArrayList<Integer>();
        	}
        }
    	return listArray;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值