博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将二叉树中每一层的节点串成链表
阅读量:6322 次
发布时间:2019-06-22

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

Crack interview 4.4

思想很简单,层序遍历:

#include 
#include
#include
using namespace std;struct LinkedListNode{ int value; LinkedListNode *pNext;};struct BTreeNode{ int value; BTreeNode *pLeft; BTreeNode *pRight; BTreeNode(int v) { value = v; pLeft = NULL; pRight = NULL; }};void LinkedBTreeNode(BTreeNode *pRoot, BTreeNode *left, BTreeNode *right){ pRoot->pLeft = left; pRoot->pRight = right;}//对于每一层存放在layerVector的BTreeNode *们,创建一个LinkedListLinkedListNode *CreateLinkedListByVector(vector
layerVector){ if (layerVector.empty()) return NULL; //头结点 LinkedListNode *pHead = new LinkedListNode(); vector
::iterator it = layerVector.begin(); pHead->value = (*it)->value; pHead->pNext = NULL; LinkedListNode *pPre = pHead; LinkedListNode *pCurr = NULL; it++; for (; it < layerVector.end(); it++) { pCurr = new LinkedListNode(); pCurr->value = (*it)->value; pCurr->pNext = NULL; pPre->pNext = pCurr; pPre = pCurr; } return pHead;}//将layerVector中的所有节点的孩子push回traverseQueue中去void PushNextLayer(queue
&traverseQueue, vector
layerVector){ vector
::iterator it; for (it = layerVector.begin(); it < layerVector.end(); it++) { if ((*it)->pLeft) traverseQueue.push((*it)->pLeft); if ((*it)->pRight) traverseQueue.push((*it)->pRight); }}/*4.4 对于一个BTree,把里面每一层的节点用链表串起来如果有N层,那么就有N个节点*/vector
LinkEachLayer(BTreeNode *pRoot){ vector
returnVector; vector
layerVector; //用来暂时记录每一层的节点,并创建链表 queue
traverseQueue; //用来遍历每一层的节点 BTreeNode *pWalker = pRoot; traverseQueue.push(pWalker); while(!traverseQueue.empty()) { //0 首先清空layerVector layerVector.clear(); //1 取出traverseQueue当前所有,就是当前层的所有的节点,push到layerVector中去 while(!traverseQueue.empty()){ layerVector.push_back(traverseQueue.front()); traverseQueue.pop(); } //2 针对layerVector中的节点,create linked list LinkedListNode *pHead = CreateLinkedListByVector(layerVector); //3 把linked list存放到returnVector中去 returnVector.push_back(pHead); //4 最后,将layerVector中的所有节点的孩子再push回traverseQueue中去,进入下一次循环 PushNextLayer(traverseQueue, layerVector); } return returnVector;}int main(){ BTreeNode a(15); BTreeNode b(10); BTreeNode c(27); BTreeNode d(7); BTreeNode e(11); LinkedBTreeNode(&a, &b, &c); LinkedBTreeNode(&b, &d, &e); vector
vec = LinkEachLayer(&a); cout<<"hello world!"<

 

 

 

 

 

EOF

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

你可能感兴趣的文章
鸟哥学习笔记---DNS
查看>>
Linux 常用目录管理命令(cd pwd mkdir rmdir)
查看>>
java程序员菜鸟进阶(四)oracle基础详解(四)oracle开启和关闭服务程序——解决安装oracle占用大量内存...
查看>>
Flask_学习笔记_09: Flask中的继承
查看>>
Mahout源码目录说明
查看>>
我的友情链接
查看>>
Java学习日志(17-2-集合框架工具类Arrays及其他特性)
查看>>
HTTP响应头和请求头信息对照表
查看>>
Chrome完美屏蔽优酷广告及黑屏教程
查看>>
一份不错的php面试题(附答案)
查看>>
前端工程资源发布、优化
查看>>
nginx安装(ubuntu14.04)
查看>>
SQLServer2008备份和恢复
查看>>
WinCE 6.0 的编译
查看>>
访问Nginx上的资源时出现403的原因及解决办法
查看>>
大家好,我是蔡某某,刚刚注册的账号,希望大家支持与帮助
查看>>
shell检测输入的IP是否合法
查看>>
30 分钟快速入门 Docker 教程
查看>>
初步计划
查看>>
Ubuntu11.10下编译android源码4.0.3
查看>>