题目:对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

解析:该题目考察的知识点较多,有层次遍历法求树的深度,并且还考察了单链表的创建。但是我们逐个击破的话,该题目只是把多个知识点融合在一起,并不难。解题思想就是用队列来层次遍历二叉树,然后用集合list记录每一层遍历出来的节点值,当达到某一深度dep,就利用该层的节点值创建为单链表,并返回。

import java.util.*;
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}*/
public class TreeLevel {public ListNode getTreeLevel(TreeNode root, int dep) {ListNode head =null;//单链表表头Queue<TreeNode> queue = new LinkedList<>();//队列,层次遍历二叉树的节点的时候保存节点信息List<Integer> list = new ArrayList<>();//存储一层的节点信息,if(root==null){return head;}queue.add(root);int current =1;//当前层的节点数int next=0;//下一层的节点数int level=0;//记录层次遍历的深度while (!queue.isEmpty()){TreeNode node = queue.poll();list.add(node.val);current--;if(node.left!=null){queue.add(node.left);next++;}if(node.right!=null){queue.add(node.right);next++;}if(current==0){level++;if(level==dep){//已经遍历到所需要的深度了break;}current=next;next=0;list = new ArrayList<>();//没有到需要的深度,需要继续重新创建list收集下一层的节点信息}}head = new ListNode(list.get(0));//注意一般的题目head都带值的for(int i=list.size()-1;i>=1;i--){//头插法创建单链表返回ListNode node = new ListNode(list.get(i));node.next=head.next;head.next=node;}return head;}
}

《程序员面试金典》输出单层节点相关推荐

  1. 程序员面试金典——4.4输出单层结点

    #程序员面试金典--4.4输出单层结点 Solution1:我的答案 关键是利用queue对二叉树进行层次遍历 /* struct TreeNode {int val;struct TreeNode ...

  2. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  3. 程序员面试金典(第 6 版)(简单篇)

    程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...

  4. 程序员面试金典 - 面试题 08.13. 堆箱子(DP)

    1. 题目 堆箱子.给你一堆n个箱子,箱子宽 wi.深 di.高 hi. 箱子不能翻转,将箱子堆起来时,下面箱子的宽度.高度和深度必须大于上面的箱子. 实现一种方法,搭出最高的一堆箱子.箱堆的高度为每 ...

  5. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...

  6. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

  7. 《程序员面试金典》+《算法导论》

    <程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...

  8. 【To Do!】程序员面试金典——11.8维护x的秩

    程序员面试金典--11.8维护x的秩 Solution1:我的答案.垃圾算法... class Rank { public:vector<int> getRankOfNumber(vect ...

  9. 程序员面试金典——番外篇之约瑟夫问题2

    程序员面试金典--番外篇之约瑟夫问题2 参考网址:https://www.nowcoder.com/profile/9270572/codeBookDetail?submissionId=157791 ...

  10. 程序员面试金典——9.8硬币表示

    程序员面试金典--9.8硬币表示 参考网址:https://www.nowcoder.com/profile/1434243/codeBookDetail?submissionId=12603339 ...

最新文章

  1. 错误make: nvcc: Command not found 解决方案
  2. 当摄影师的山寨版奥巴马(转载)
  3. jdbc oracle存储过程,java jdbc 执行oracle存储过程
  4. MYSQL 查看表上索引的 1 方法
  5. LeetCode 723. 粉碎糖果(模拟)
  6. 论文浅尝 | 一日看尽长安花--NLP可解释研究梳理
  7. POJ 2788 ipnetworks 计算机网络相关知识
  8. 【XLL 框架库函数】 Excel/Excel12f
  9. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)【转】
  10. mkfs.xfs 命令找不到的解决方法
  11. python自动化办公入门书籍-Python自动化办公实战教程2020最新带源码
  12. oracle sql 取日期,Oracle SQL日期及日期格式获取命令,oraclesql
  13. win10怎么设置计算机密码怎么设置,win10如何设置开机密码|win10设置登陆密码和账户的方法...
  14. linux crontab 每30秒,crontab 每 30 秒自動執行
  15. android自动接收并填充短信验证码
  16. 固态硬盘usb测试软件,固态硬盘检测修复坏道三级OP设置软件HDAT2 5.3 ISO版
  17. 基于DNN-ML的3D全息交互
  18. android高德地图marker图标,高德地图自定义Marker显示文字
  19. 适合装u盘的linux系统下载软件,ghost xp系统镜像安装win7系统下载地址适合装u盘的linux...
  20. Ubuntu1804磁盘容量不足

热门文章

  1. 【已解决】java.lang.NullPointerException at line 15, Solution.r
  2. php对接钉钉_PHP使用POST方法与钉钉对接无返回结果的问题
  3. 10年老电脑如何提速_告别求人!3个方法教你怎样让你的电脑快的嗖嗖的!
  4. 计算机linux入门教程,Turbolinux入门教程1
  5. matlab运行就是编译么,matlab编译运行c文件
  6. 使用gcc编译c语言程序,用GCC编译C ++程序
  7. 静态ip和动态ip的区别_动态IP和静态IP有哪些区别?
  8. java基础知识点_零基础学习Java语言,各个阶段需要掌握的知识点
  9. Linux上(Redhat7)实现NFS文件共享服务
  10. 多维列表索引_10分钟带你学会Pandas多层级索引