public ArrayList<LinkedList<TreeNode>> createLinkedList(TreeNode root)
{
//存储当前level
LinkedList<TreeNode> current = new LinkedList<TreeNode>();
//Store return value
ArrayList<LinkedList<TreeNode>> linkedListArray = new ArrayList<LinkedList<TreeNode>>();
if(root!=null)
current.push(root);
else return null;
//这里对BFS进行一些改动,用一个临时链表存储当前level的所有子节点,之后将这个level的节点存入返回数组,再在子level上循环调用这个方法
while(current.size() != 0)
{
LinkedList<TreeNode> nextLevel = new LinkedList<TreeNode>();
for(TreeNode node:current)
{
if(node.left != null)
nextLevel.add(node.left);
if(node.right != null)
nextLevel.add(node.right);
}
linkedListArray.add(current);
current = nextLevel;
}
return linkedListArray;
}
CC上说这个算法的时间效率为O(n)
算法并不是递归算法,效率为O(n)的原因应该是对于每一个节点,我们都仅仅做了constant的操作
<pre name="code" class="java"> for(TreeNode node:current)
{
if(node.left != null)
nextLevel.add(node.left);
if(node.right != null)
nextLevel.add(node.right);
}
故时间效率为O(n),尽管这里面有一个for套一个while,但其实整个循环仅仅是将n个元素遍历了一遍而已