java list 顺序遍历_Java经典算法:二叉树级顺序遍历

给定一个二叉树,返回其节点值的级别顺序遍历。(即,从左到右,逐级)。

例如:

给定二叉树{3,9,20,#,#,15,7},

3

/ \

9 20

/ \

15 7

返回其级别顺序遍历为[[3],[9,20],[15,7]]

Java解决方案1

显然,可以使用队列解决此问题。但是,如果我们使用一个队列,我们​​将无法跟踪每个级别的启动时间。因此,我们使用两个队列来跟踪当前级别和下一个级别。

public ArrayList> levelOrder(TreeNode root) {

ArrayList> al = new ArrayList>();

ArrayList nodeValues = new ArrayList();

if(root == null)

return al;

LinkedList current = new LinkedList();

LinkedList next = new LinkedList();

current.add(root);

while(!current.isEmpty()){

TreeNode node = current.remove();

if(node.left != null)

next.add(node.left);

if(node.right != null)

next.add(node.right);

nodeValues.add(node.val);

if(current.isEmpty()){

current = next;

next = new LinkedList();

al.add(nodeValues);

nodeValues = new ArrayList();

}

}

return al;}

Java解决方案2

我们还可以通过使用整数队列跟踪级别而不是跟踪节点的另一个级别来改进解决方案1。

public List> levelOrder(TreeNode root) {

List> result = new ArrayList<>();

if(root==null){

return result;

}

LinkedList nodeQueue = new LinkedList<>();

LinkedList levelQueue = new LinkedList<>();

nodeQueue.offer(root);

levelQueue.offer(1);//start from 1

while(!nodeQueue.isEmpty()){

TreeNode node = nodeQueue.poll();

int level = levelQueue.poll();

List l=null;

if(result.size()

l = new ArrayList<>();

result.add(l);

}else{

l = result.get(level-1);

}

l.add(node.val);

if(node.left!=null){

nodeQueue.offer(node.left);

levelQueue.offer(level+1);

}

if(node.right!=null){

nodeQueue.offer(node.right);

levelQueue.offer(level+1);

}

}

return result;}

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值