leetcode 102. Binary Tree Level Order Traversal

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

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

public List> levelOrder(TreeNode root) {
        List> listArray = new ArrayList>();
        List list = new ArrayList();
        Queue queue = new LinkedList();
        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();
        	}
        }
    	return listArray;
    }

你可能感兴趣的:(算法)