给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如:若一棵树的深度为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 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;
}

转载于:https://my.oschina.net/u/2822116/blog/790194

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值