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

Solution1:我的答案

关键是利用queue对二叉树进行层次遍历

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*//*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class TreeLevel {
public:ListNode* getTreeLevel(TreeNode* root, int dep) {// write code here//利用栈进行层次遍历struct ListNode* result = NULL;if(root == NULL || dep <= 0)return result;queue<TreeNode*> seq_tree;vector<int> dupli;seq_tree.push(root);int cur = 1, next = 0, count_depth = 1;struct TreeNode* temp = NULL;while(!seq_tree.empty()) {if(count_depth == dep + 1)break;temp = seq_tree.front();if(count_depth == dep) {dupli.push_back(temp->val);}cur--;if(temp->left != NULL) {seq_tree.push(temp->left);next++;}if(temp->right != NULL) {seq_tree.push(temp->right);next++;}if(cur == 0) {cur = next;next = 0;count_depth++;}seq_tree.pop();}return BuildList(dupli);}struct ListNode* BuildList(const vector<int> &res) {struct ListNode* pHead = new ListNode(-1);struct ListNode* temp = pHead;for(int i = 0; i < res.size(); i++) {temp->next = new ListNode(res[i]);temp = temp->next;}return pHead->next;}
};

Solution2:递归遍历

参考网址:https://www.nowcoder.com/profile/6458593/codeBookDetail?submissionId=18190264
其实也可以用递归遍历实现,刚开始为深度为dep,每往下递归一层,则深度减一(dep=dep-1),当dep==1的时候,便输出那个元素,如果先递归左子树,那么则实现从左到右打印,如果先递归右子树,则实现从右往左打印。
好牛逼的思路,要学习一个!

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*//*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class TreeLevel {
public:ListNode* getTreeLevel(TreeNode* root, int dep) {// write code hereListNode* list = new ListNode(-1);ListNode* listHead = list;get1(root,list,dep);return listHead->next;}void get1(TreeNode* root, ListNode* &list, int dep) {if (dep <= 0 || root == NULL)return;if (dep == 1) {ListNode* listnext = new ListNode(root->val);list->next = listnext;list = list->next;return ;}get1(root->left, list, dep - 1);get1(root->right, list, dep - 1);}
};

程序员面试金典——4.4输出单层结点相关推荐

  1. 程序员面试金典——2.3访问单个结点的删除

    Solution1:我的答案 个人觉得就挺好的,哈哈哈 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val( ...

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

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

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

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

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

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

  5. 程序员面试金典 - 面试题 10.11. 峰与谷

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 在一个整数数组中,"峰& ...

  6. 程序员面试金典 - 面试题 10.03. 搜索旋转数组

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...

  7. 《程序员面试金典(第6版)》面试题 16.13. 平分正方形(直线的斜截式方程,C++)

    题目描述 给定两个正方形及一个二维平面.请找出将这两个正方形分割成两半的一条直线.假设正方形顶边和底边与 x 轴平行. 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = [ ...

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

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

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

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

最新文章

  1. Hash函数的安全性
  2. HTML5 - Websocket
  3. 想知道自己能不能长命百岁?窝个粑粑测个菌?
  4. 【人物】大众点评张涛:未来2-3年是O2O红利期和飞速增长期
  5. md函数MySQL_MySQL的常用SQL语句.md
  6. 平板电脑连接投影仪_苹果电脑如何连接投影仪 苹果Mac连接投影仪方法【详解】...
  7. Kafka生产者源码解析
  8. 输出最长上升子序列 模型(DP)
  9. 【慢慢学算法】:奇偶校验(bitset使用)
  10. MFC SendMessage与PostMessage区别
  11. 软考网络工程师--数据通信基础
  12. 喜讯 | 大势智慧获得全球软件领域最高权威CMMI5认证
  13. 【Android】高德地图从经纬度获得地址字符串
  14. Csv 之 简单解决使用 Excel 打开 csv 出现中文乱码现象
  15. 金山词霸不断的弹出窗口(金山词霸防欺诈提示),犹如病毒软件
  16. 利用jink的驱动软件j-flash 合并两个hex的方法,bootloader+app -(转载)
  17. 计算机组老师颁奖词,教研组颁奖词5篇
  18. 1103 Integer Factorization (30分)
  19. android 微软桌面,Mirosoft Launcher微软桌面
  20. Linux 设备驱动篇之I2c设备驱动

热门文章

  1. 【树莓派搭建个人网站】花生壳内网穿透
  2. LInux下的交换分区以及相关查看命令
  3. linux uuid挂载磁盘_linux下mount硬盘步骤,含UUID mount办法
  4. idea redis图形化_5.13redis图形化工具---idea中配置redis密码
  5. arm 交叉编译找不到so_交叉编译v8时,提示找不到libstdc++.so.6里面GLIBCXX_3.4.20版本的某个符号...
  6. matlab vision hdl,MATLAB下载,MATLAB购买,MATLAB试用,MATLAB介绍,MATLAB评价
  7. MFC UpdateData
  8. TensorFlow2实现空间自适应归一化(Spatial Adaptive Normalization, SPADE)
  9. java 规则引擎roolie_【智能决策引擎】规则引擎介绍
  10. java 编译开关_Java开关盒字符串