淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL

题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。

运用队列,按层遍历,每次遍历一层时,添加新指针,由于每个节点只需要进队一次出队一次,时间复杂度为O(n),空间复杂度为O(n),具体代码如下:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;

struct BinaryTreeNode
{
	int data;
	BinaryTreeNode* pNext;
	BinaryTreeNode* lchild,*rchild;
	BinaryTreeNode(int x):data(x),pNext(NULL),lchild(NULL),rchild(NULL){}
};

void addNextPoint(BinaryTreeNode* root)
{
	if(root == NULL)return;
	queue<BinaryTreeNode*> q;
	q.push(root);
	while(!q.empty())
	{
		int levelLength = q.size();//当前层的节点个数
		BinaryTreeNode* first = NULL,*second = NULL;//每次取两个元素进行操作
		while(levelLength > 0)
		{
			first = q.front();
			q.pop();
			if(first->lchild)q.push(first->lchild);
			if(first->rchild)q.push(first->rchild);
			if(--levelLength == 0)break;
			second = q.front();//第二个元素不需要出队
			first->pNext = second;
		}
	}
}

void printLevel(BinaryTreeNode* root)//打印测试
{
	if(root)
	{
		cout << root->data << " pNext 为:";
		if(root->pNext) cout << root->pNext->data << " " << endl;
		else cout << " NULL"<<endl;
		printLevel(root->lchild);
		printLevel(root->rchild);
	}
}

int main()
{
	BinaryTreeNode* root = new BinaryTreeNode(1);
	root -> lchild = new BinaryTreeNode(2);
	root -> rchild = new BinaryTreeNode(3);
	root -> lchild -> lchild = new BinaryTreeNode(4);
	root -> lchild -> rchild = new BinaryTreeNode(5);
	root -> rchild -> lchild = new BinaryTreeNode(6);
	root -> rchild -> rchild = new BinaryTreeNode(7);
	root -> lchild -> lchild -> lchild = new BinaryTreeNode(8);
	addNextPoint(root);
	printLevel(root);
}

淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL

时间: 2024-08-28 20:23:35

淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL的相关文章

网红淘宝店的成与败

近年来,随着直播的人气火热上升,越来越多的网红出现在我们的眼前.很多人都想成为网红,为什么呢?因为他们有人气,有喜欢自己的粉丝,而他们能通过这些粉丝和人气来获取利益,例如通过自己的人气接广告或卖东西给喜欢自己的粉丝.这就是为什么淘宝里有越来越多的网红店,他们通过自身的人气效应给自己打广告,在直播或博客中秀出自己店里的商品. 想要了解网红淘宝店的成与败,我们先来谈论网红淘宝店的运营方式.网红淘宝店当然老板是网红,但其实在幕后有一个操作团体,他们不仅起到封装网红的作用,还帮他们进货出货,网红只要负责

PHP笔试题总结1

---恢复内容开始--- 1.1    PHP中判断变量的相关函数 1.2    strlen( )与mb_strlen( )的作用分别是什么(新浪网技术部) strlen 和mb_strlen 都是用于获取字符串长度的,其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符串的个数,而是该字符串的总字节数,可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring

淘宝技术发展

转载 http://blog.csdn.net/kobejayandy/article/details/8685271 目录 一.引言 二.个人网站 三.Oracle/支付宝/旺旺 四.淘宝技术发展(Java时代:脱胎换骨) 五.淘宝技术发展(Java时代:坚若磐石) 六.淘宝技术发展(Java时代:创造技术-TFS) 七.淘宝技术发展(分布式时代:服务化) 作者:赵超 一.引言 光棍节的狂欢 “时间到,开抢!”坐在电脑前早已等待多时的小美一看时间已到 2011 年 11 月 11 日零时,便迫

淘宝网的架构分析(小组)

一个成熟的大型网站(如淘宝.京东等)的系统架构需要考虑诸多复杂的因素,因为像淘宝这种大型网站数据量比一般的网站要大的多,所以在设计架构方面也要复杂的多,既要考虑成本因素也要考虑访问速度安全性等.这里我简单的对淘宝的网站系统架构进行一个简单的分析. 淘宝作为一个大型购物网站,其数据量是很大的,所以不像一般网站,淘宝需要用各种方法来保证服务器的正常运行以及用户购买时的良好体验.主要由以下方式:1.应用.数据.文件分离 2.利用缓存改善网站性能 3.使用CDN和反向代理提高访问速度 4.使用分布式文件

【转载】淘宝架构框架发展史

转自 http://www.361way.com/taobao-architecture/1948.html      一.个人网站  2003 年 4 月 7 日,马云,在杭州,成立了一个神秘的组织.他叫来十位员工,要他们签了一份协议,这份协议要求他们立刻离开阿里巴巴,去做一个神秘的项目.这个项目要求绝对保密,老马戏称“连说梦话被老婆听到都不行,谁要是透漏出去,我将追杀到天涯海角”.这份协议是英文版的,匆忙之间,大多数人根本来不及看懂,但出于对老马的信任,都卷起铺盖离开了阿里巴巴. 他们去了一

淘宝十年技术路

最近有幸,在学校的图书馆借到了子柳先生的<淘宝技术这十年>,拜读一番,感慨万分.将书中内容加上自己的想法与诸君分享,毕竟未经人事看法粗浅,希望能得到园子里前辈们的指点~ 一.淘宝的核心技术(国内乃至国际的Top,这还是2011年的数据) 拥有全国最大的分布式Hadoop集群(云梯,2000左右节点,24000核CPU,48000GB内存,40PB存储容量) 全国分布80+CDN节点,能够自动找寻最近的节点提供服务,支持流量超过800Gbps,足以拖垮一个城市的流量 不逊于百度的搜索引擎,对数十

从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇,而神奇的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,认为Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理. 由此,近期凡是空暇时,便在看"Hadoop","MapReduce""海量数据处理"这方面的论文.但在看论

从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)

从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾起我的兴趣.在看过介绍它们的文章或论文之后,认为Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理. 由此,近期凡是空暇时,便在看"Hadoop"."MapReduce""海量数据处理"这方面的论文.但在看论

facebook海量图片存储系统与淘宝TFS系统比较

本篇论文的原文可谓通俗易懂.行云流水.结构清晰.图文并茂……正如作者所说的——"替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完美的设计……我们花费了很多的注意力来保持它的简单",本篇论文也是一样,没有牵扯空洞的庞大架构.也没有晦涩零散的陈述,有的是对痛点的反思,对目标的分解,条理清晰,按部就班.既描述了宏观的整体流程,又推导了细节难点的技术突破过程.以至于译者都不需要在文中插入过多备注和解读了^_^.不过在文章末尾,译者以淘宝的解决方案作为对比,阐述了文