给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如:若一棵树的深度为D,则会创建出D个链表)
解法:可以用任意的方式遍历整棵树,只要记住结点位于哪一层即可。 可用将前序遍历算法稍作修改,将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