输出单层结点
来源:互联网 发布:地接导游知乎 编辑:程序博客网 时间:2024/05/01 05:27
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。(根节点深度为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 here if(root==NULL||dep<0) return NULL; //宽度优先搜索 ListNode* head=NULL; int d=1; //当前队列中的待弹出节点的深度(根节点的深度为0) int curnum=1;//当前层需要弹出的节点数 int nextnum=0;//下一层需要弹出的节点数 queue<TreeNode*> q; q.push(root); while(!q.empty()) { if(d!=dep) { while(curnum--) { TreeNode* tmp=q.front(); if(tmp->left) { q.push(tmp->left); nextnum++; } if(tmp->right) { q.push(tmp->right); nextnum++; } q.pop(); } } else { //此时队列中的所有节点均为深度dep上的节点 ListNode* last=NULL; while(!q.empty()) { if(head==NULL) { TreeNode* tmp=q.front(); ListNode* Node=new ListNode(tmp->val); head=Node; last=head; q.pop(); } else { TreeNode* tmp=q.front(); ListNode* Node=new ListNode(tmp->val); last->next=Node; last=Node; q.pop(); } } return head; } d++; curnum=nextnum; nextnum=0; } return head; }};
0 0
- 输出单层结点
- 牛客网 | 输出单层结点
- 输出单层结点
- 输出单层结点
- 输出单层结点
- 输出树单层结点
- 输出单层结点
- 输出单层结点
- 输出单层结点
- 第九天 输出单层结点
- 面试算法-----输出单层结点
- 《程序员面试金典》输出单层结点
- 输出单层结点之程序员面试经典
- 程序员面试金典——输出单层结点
- 程序员面试金典——输出单层结点
- 程序员面试金典:高度最小的BST、输出单层结点
- 单层输出节点
- 输出单层节点
- 用POI实现双层标题excel打印
- getc()与putc()
- JVisualVM使用与分析案例
- POJ 3620 DFS
- ferror()
- 输出单层结点
- jQuery插件之ajaxFileUpload
- 101. Symmetric Tree
- 欢迎使用CSDN-markdown编辑器
- 结构体字节对齐
- __unsafe_unretained ownership qualifier
- 渗透工程师必备的几款火狐插件
- ferror() - C库函数
- listView拓展的时候出现的拓展页面显示不全解决方法(只显示一条数据)