4.4 给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如,若一棵树的深度为D,则会创建D个链表)。

类似于leetcode:Populating Next Right Pointers in Each Node II

解答

这道题目本质上是个BFS,也就是说,如果已经构建了第i层结点的链表, 那么将此链表中每个结点的左右孩子结点取出,即可构建第i+1层结点的链表。 设结点类型为TreeNode,那么指向每一层链表头结点的类型为list<TreeNode*>, 将每一层头结点指针放到vector中。如果当前层的链表不为空, 那么将该链表的结点依次取出,然后将这些结点的不为空的孩子放入新的链表中。

C++实现代码:

#include<vector>
#include<iostream>
#include<list>
using namespace std; struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}; TreeNode* helper(vector<int>::iterator begin,vector<int>::iterator end)
{
TreeNode *root=NULL;
if(begin+==end)
return new TreeNode(*begin);
if(begin>=end)
return NULL;
int mid=(end-begin-)/;
root=new TreeNode(*(begin+mid));
root->left=helper(begin,begin+mid);
root->right=helper(begin+mid+,end);
return root;
} TreeNode* createAVL(vector<int> &vec)
{
if(vec.empty())
return NULL;
return helper(vec.begin(),vec.end());
} vector<list<TreeNode*> > find_level_linklists(TreeNode *root)
{
list<TreeNode*> ll;
vector<list<TreeNode*> > ret;
ll.push_back(root);
ret.push_back(ll);
while(!ll.empty())
{
list<TreeNode*> tmp=ll;
ll.clear();
auto iter=tmp.begin();
while(iter!=tmp.end())
{
TreeNode *node=*iter;
if(node->left)
ll.push_back(node->left);
if(node->right)
ll.push_back(node->right);
iter++;
}
if(!ll.empty())
ret.push_back(ll);
}
return ret;
} void print(vector<list<TreeNode*> > res)
{
vector<list<TreeNode*> >::iterator vit;
for(vit=res.begin(); vit!=res.end(); ++vit)
{
list<TreeNode*> li = *vit;
list<TreeNode*>::iterator lit;
for(lit=li.begin(); lit!=li.end(); ++lit)
{
TreeNode *n = *lit;
cout<<n->val<<" ";
}
cout<<endl;
}
} int main()
{
vector<int> vec= {,,,,,,,,,};
TreeNode *root=createAVL(vec);
vector<list<TreeNode*> > res=find_level_linklists(root);
print(res);
}

运行结果:

careercup-树与图 4.4的更多相关文章

  1. SqlServer-无限递归树状图结构设计和查询

    在现实生活中,公司的部门设计会涉及到很多子部门,然后子部门下面又存在子部门,形成类似判断的树状结构,比如说评论楼中楼的评论树状图,职位管理的树状图结构等等,实现类似的树状图数据结构是在开发中经常出现的 ...

  2. Android开源图表之树状图和饼状图的官方示例的整理

    最近由于工作需要,所以就在github上搜了下关于chart的三方框架 官方地址https://github.com/PhilJay/MPAndroidChart 由于工作需要我这里整理了一份Ecli ...

  3. D3树状图给指定特性的边特别显示颜色

    D3作为前端图形显示的利器,功能之强,对底层技术细节要求相对比较多. 有一点,就是要理解其基本的数据和节点的匹配规则架构,即enter,update和exit原理,我前面的D3基础篇中有介绍过,不明白 ...

  4. D3树状图异步按需加载数据

    D3.js这个绘图工具,功能强大不必多说,完全一个Data Driven Document的绘图工具,用户可以按照自己的数据以及希望实现的图形,随心所欲的绘图. 图形绘制,D3默认采用的是异步加载,但 ...

  5. [整理] ES5 词法约定文档树状图

    将ES5 词法说明整理为了树状图,方便查阅,请自行点开小图看大图:

  6. bzoj 4871: [Shoi2017]摧毁“树状图” [树形DP]

    4871: [Shoi2017]摧毁"树状图" 题意:一颗无向树,选两条边不重复的路径,删去选择的点和路径剩下一些cc,求最多cc数. update 5.1 : 刚刚发现bzoj上 ...

  7. vue 树状图数据的循环 递归循环

    在main.js中注册一个子组件 在父组件中引用 树状图的数据格式 绑定一个数据传入子组件,子组件props接收数据 子组件中循环调用组件,就实现了递归循环

  8. ztree 文件夹类型的 树状图

    未套程序的源代码: 链接:http://pan.baidu.com/s/1nuHbxhf 密码:4aw2 已套程序的源代码: css样式: /*发布邮件 选择领导弹窗*/ .xuandao{ disp ...

  9. visio画等分树状图

    一 树状图形状 Search里搜索Tree,找到Double Tree或者Multi Tree的形状 二 分出更多branch 按住主干上的黄色小方块,拖出更多分支. 三 等分分支 将每个分支和对应的 ...

  10. ArcGIS教程:树状图

    摘要 构造可显示特征文件里连续合并类之间的属性距离的树示意图(树状图). 使用方法 · 输入特征文件必须採用预定的特征文件格式. 特征文件可使用 Iso 聚类或创建特征工具来创建.该文件必须至少包括两 ...

随机推荐

  1. C​+​+​构​造​函​数​,​复​制​构​造​函​数​和​析​构​函​数​专​题

    链接:http://wenku.baidu.com/view/d9316c0e52ea551810a6872a.html 本文作者:黄邦勇帅本文是学习 C++中的最基本的内容,因此学习 C++就应全部 ...

  2. 【HDOJ】4400 Mines

    (1) KD树,但实际没有STL快,3000+ /* 4400 */ #include <iostream> #include <string> #include <ma ...

  3. powerdesigner导出SQL时大写转换

    打开物理模型,点击菜单“Tools->Execute Commands -> Edit/Run Script...",或者快捷键(Ctrl+Shift+X)执行下面vbscrip ...

  4. Add controls dynamically in flowlayoutpanel

    For a FlowLayoutPanel, you don't need to specify a location since the controls are arranged for you. ...

  5. 一个老站长对HTML5认识

    新的一年开始,各个领域都在悄悄发生着一些变化.在移动互联网领域也在发生着很多变化,其中HTML5的技术在多年的实践和国内巨头公司的大力推广下,HTML5的webapp几乎可以和原生态的app分庭抗礼了 ...

  6. qualcomm platform camera porting

    转载自http://www.cnblogs.com/thjfk/p/4086001.html camera基本代码架构 Camera原理:外部光线穿过lens后,经过color filter滤波后照射 ...

  7. java 小结2 多态问题和容器介绍

    面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运 ...

  8. Drupal安装及使用问题解决列表

    #1. 启动 Clean URL 修改Apache的配置文件(如httpd.conf),打开 LoadModule rewrite_module modules/mod_rewrite.so选项.然后 ...

  9. Dynamics CRM 2011 2013-(An error occurred while opening mailbox xxx@xx.com Microsoft.Crm.Tools.Email.Providers.)

    An error occurred while opening mailbox  Microsoft.Crm.Tools.Email.Providers. Whenever I check how C ...

  10. Redis以及Redis的php扩展安装无错版

    安装Redis 下载最新的 官网:http://redis.io/  或者  http://code.google.com/p/redis/downloads/list 第一步:下载安装编译 #wge ...