解法:能夠用任意的方式遍歷整棵樹,只要記住結點位於哪一層便可。算法
可用將前序遍歷算法稍做修改,將level+1傳入下一個遞歸調用。下面是使用深度優先搜索的實現代碼。安全
void createlLinkedList(TreeNode root,ArrayList<LinkedList<TreeNode>> lists,int level)
{
if(root==null) return;//終止條件
LinkedList<TreeNode> list=null;
if(lists.size()==level)//該層不在鏈表中
{
list=new LinkedList<TreeNode>();
/*以先序遍歷全部層級,所以,若這是第一次訪問第i層,則表示咱們已經訪問過第0到
i-1層,所以,咱們能夠安全地將這一層加到鏈表末端
*/
lists.add(list);
}
else
{
list=lists.get(level);
}
list.add(root);
createLevelLinkedList(root.left,lists,level+1);
createLevelLinkedList(root.right,lists.level+1);
}
ArrayList<LinkedList<TreeNode>> createLevelLinkedList(TreeNode root)
{
ArrayList<LinkedList<TreeNode>> lists=new ArrayList<LinkedList<TreeNode>>();
createLevelLinkedList(root,lists,0);
return lists;
}遞歸
ArrayList<LinkedList<TreeNode>> createLevelLinkedList(TreeNode root)
{
ArrayList<LinkedList<TreeNode>> result=new ArrayList<LinkedList<TreeNode>>();
/*訪問根節點*。
*/
LinkedList<TrooNode> current=new LinkedList<TreeNode>();
if(root != null)
{
current.add(root);
}
while(current.size()>0)
{
result.add(current);//加入上一層
LinkedList<TreeNode> parents=current;//轉到下一層
current=new LinkedList<TreeNode>();
for(TreeNode parent:parents)//訪問子結點
{
if(parent.left!=null)
{
current.add(parent.left);
}
if(parent.right!=null)
{
current.add(parent.right);
}
}
}
return result;
}get