博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(017)将一棵二叉查找树重构成链表(keep it up)
阅读量:7280 次
发布时间:2019-06-30

本文共 1735 字,大约阅读时间需要 5 分钟。

给定一棵二叉查找树,设计算法,将每一层的全部结点构建为一个
链表(也就是说, 假设树有D层,那么你将构建出D个链表).
这个题实质是个BFS,可是实现起来有点麻烦,又不像常见的BFS,
所以编写代码时有点艰难。
以下的代码使用两个list来实现层次遍历的,首先用Cur链表存储当前层
的结点,然后用Pre链表存储当前层的子层结点,Cur和Pre。下一次遍历时

Pre就变成当前层,Cur就变成它的子层。这样交替运行。

代码:

struct TreeNode{	int   data;	TreeNode* leftChild;	TreeNode* rightChild;};void createLinks(const TreeNode* vRoot, std::vector
>& vListVec){ if (vRoot == NULL) return; vListVec.clear(); std::list
Pre; std::list
Cur; std::list
* pList; Cur.push_back(vRoot); vListVec.push_back(Cur); pList = &Cur; bool IsCur = true; while (pList->empty()) { if (IsCur) { while (pList->empty()) { TreeNode* Tmp = pList->front(); pList->pop_front(); if (Tmp->leftChild) Pre.push_back(Tmp->leftChild); if (Tmp->rightChild) Pre.push_back(Tmp->rightChild); } IsCur = false; pList = &Pre; vListVec.push_back(Pre); } else { while (pList->empty()) { TreeNode* Tmp = pList->front(); pList->pop_front(); if (Tmp->leftChild) Cur.push_back(Tmp->leftChild); if (Tmp->rightChild) Cur.push_back(Tmp->rightChild); } IsCur = true; pList = Cur; vListVec.push_back(Cur); } }}

给定一个有向图,设计算法推断两结点间是否存在路径。

常见的BFS。

代码:

struct GraphNode{	int data;	GraphNode* next;}bool judge(const GraphNode* vBgn, const GraphNode* vEnd){	if (vBgn == NULL || vEnd == NULL) return false;	std::map
MapV; std::queue
Que; Que.push(vBgn); MapV[vBgn] = true; while (!Que.empty()) { GraphNode* Tmp = Que.front(); Que.pop(); while (Tmp->next) { Tmp = Tmp->next; if (MapV.find(Tmp) != MapV.end()) { if (Tmp == vEnd) return true; MapV[Tmp] = true; Que.push(Tmp); } } } return false;}

转载地址:http://mgqcm.baihongyu.com/

你可能感兴趣的文章
shell编程——循环执行
查看>>
操作系统复习笔记(四)
查看>>
经典博客---《数据结构与算法》
查看>>
C#开发微信门户及应用(46)-基于Bootstrap的微信门户应用管理系统功能介绍
查看>>
php访问mysql 封装
查看>>
C#开发微信门户及应用(20)-微信企业号的菜单管理
查看>>
Git介绍
查看>>
activiti入门
查看>>
Java——Ajax+Tomcat完成异步请求
查看>>
乱·语
查看>>
回头再说 001
查看>>
Winform开发框架中的内容及文档管理模块功能介绍
查看>>
【强化学习炼金术】李飞飞高徒带你一文读懂RL来龙去脉
查看>>
[Erlang 0098] net_kernel与节点互连,断开,监控
查看>>
stm32 加入 USE_STDPERIPH_DRIVER、STM32F10X_HD的原因
查看>>
利用GDAL进行工具开源化改造
查看>>
第一个ASP.NET
查看>>
2.2. mysqldump - a database backup program
查看>>
01-老马jQuery教程-jQuery入口函数及选择器
查看>>
分割工具——按字段属性
查看>>