当前位置: 首页 > 后端技术 > Java

LeetCode-102-levelordertraversalofbinarytree

时间:2023-04-02 00:25:47 Java

levelordertraversalofbinarytree题目描述:给你一棵二叉树,请返回层序遍历得到的节点值。(即逐层,从左到右访问所有节点)。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:使用队列遍历二叉树。队列的特点是先进先出,所以用队列来遍历二叉树,实现层序遍历。具体过程如下:首先,如果root为空,则直接返回一个空的List。如果root不为空,声明一个队列节点,将根节点加入队列,声明一个结果,然后遍历nodes中的节点,遍历过程如下:首先用count记录队列中的节点个数currentqueue,也就是当前层的节点个数,vals记录当前节点的值;从nodes中依次取出count个节点,将对应的节点值放入vals中,如果当前节点的左右子节点不为空,则按从左到右依次放入nodes中。然后将vals添加到result结果中。反复遍历nodes中的节点,直到nodes为空。最后返回的结果就是层序遍历的结果。importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;publicclassLeetCode_102{/***使用队列遍历二叉树:队列的特性在先先出*@paramroot*@return*/publicstaticList>levelOrder(TreeNoderoot){if(root==null){returnnewArrayList<>();}List>result=newArrayList<>();//暂存每一行的节点Queuenodes=newLinkedList<>();节点。添加(根);while(!nodes.isEmpty()){//每次遍历一行数据Listvals=newArrayList<>();intcount=nodes.size();while(count>0){TreeNodecurNode=nodes.poll();vals.add(curNode.val);//将当前节点的左右子节点从左到右放入队列if(curNode.left!=null){nodes.add(curNode.left);}如果(curNode.right!=null){节点。添加(当前节点。右);}数数-;}结果。添加(值);}返回结果;}publicstaticvoidmain(String[]args){TreeNoderoot=newTreeNode(3);根。left=newTreeNode(9);根。right=newTreeNode(20);根。正确的。left=newTreeNode(15);根。正确的。right=newTreeNode(7);for(Listintegers:levelOrder(root)){for(Integerinteger:integers){System.out.print(integer+"");}System.out.println();}}}【常用】输入报价,免费报价