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

LeetCode-107-二叉树的二次遍历Ⅱ

时间:2023-04-01 16:55:15 Java

二叉树的二次遍历Ⅱ题目描述:给定一棵二叉树,返回其节点值的自下而上的层次遍历。(即从叶子节点所在层到根节点所在层,从左到右逐层遍历)例子请参考LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:层序遍历首先,如果根节点为空,直接返回空结果集。如果根节点不为空,则使用队列遍历每一层的节点。具体过程如下:先将根节点放入队列;遍历队列中的当前节点数,即当前层的结果,然后将当前层节点的左右非空子节点放入队列;然后继续遍历队列中下一层的节点,直到队列为空。这样得到的结果就是从上到下层序遍历的结果,最后调用Collections.reverse(result);该方法将得到的结果集进行倒序排列,得到自下而上的层序遍历。importcom.kaesar.leetcode.TreeNode;importjava.util.*;publicclassLeetCode_107{/***层序遍历**@paramroot*@return*/publicstaticList>levelOrderBottom(TreeNoderoot){//初始化结果集List>result=newArrayList<>();//如果根节点为空,直接返回结果if(root==null){returnresult;}//使用一个队列存储每一层的节点Queuenodes=newLinkedList<>();节点。添加(根);//遍历每一层的节点,将节点的值放入链表while(!nodes.isEmpty()){intcount=nodes.size();列表<整数>curLevel=newArrayList<>();while(count>0){TreeNodecur=nodes.poll();curLevel.add(cur.val);if(cur.left!=null){节点。添加(当前。左);}if(cur.right!=null){nodes.add(cur.right);}数数-;}result.add(curLevel);}//最后将得到的结果集进行倒序,得到底层->顶层的遍历结果Collections.reverse(result);返回结果;}publicstaticvoidmain(String[]args){//测试用例TreeNoderoot=newTreeNode(3);root.left=newTreeNode(9);root.right=newTreeNode(20);root.right.left=newTreeNode(15);root.right.right=newTreeNode(7);for(Listintegers:levelOrderBottom(root)){for(Integerinteger:integers){System.out.print(integer+"");}System.out.println();}}}【每日一语】很多事情总是匆匆忙忙,世事变迁,时间紧迫,万年太久,只争朝夕

猜你喜欢