package com.interview.algorithms.tree;
import com.interview.basics.model.collection.list.ArrayList;
import com.interview.basics.model.collection.list.List;
import com.interview.basics.model.tree.BinaryTree;
import com.interview.basics.model.tree.BinaryTreeNode;
import java.util.Iterator;
/**
* Created with IntelliJ IDEA.
* User: stefanie
* Date: 7/17/14
* Time: 1:13 PM
*/
public class C5_13_TreeByLayerList {
public static List<List> getLists(BinaryTree tree){
List<List> lists = new ArrayList<List>();
List<BinaryTreeNode> current;
List<BinaryTreeNode> children = new ArrayList<>();
children.add(tree.getRoot());
while(children.size() > 0){
lists.add(children);
current = children;
children = new ArrayList<>();
Iterator<BinaryTreeNode> itr = current.iterator();
while(itr.hasNext()){
BinaryTreeNode node = itr.next();
if(node.left != null) children.add(node.left);
if(node.right != null) children.add(node.right);
}
}
return lists;
}
public static List<List> getListsRecursive(BinaryTree tree){
List<List> lists = new ArrayList<>();
getListsRecursive(tree.getRoot(), 0, lists);
return lists;
}
private static void getListsRecursive(BinaryTreeNode node, int level, List<List> lists){
if(node == null) return;
List list = lists.get(level);
if(list == null){
list = new ArrayList();
lists.add(level, list);
}
list.add(node);
getListsRecursive(node.left, level + 1, lists);
getListsRecursive(node.right, level + 1, lists);
}
}