[ThinkingDog]是一个积极向上、乐观、热心的人。
沉思的狗の博客
[ThinkingDog]欢迎您的光临,请多多指教!
微软等数据结构+算法面试100题_全部出炉_01
/**/
/*
*******************************************************************
created: 2011/05/26 12:13
filename: BSTree2DuLink.h
file base: BSTree2DuLink
file ext: h
author: WT@CHINA
purpose: 把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
********************************************************************
*/
#include
<
iostream
>
using
namespace
std;
struct
BSTreeNode
{
int
m_nValue;
//
value of node
BSTreeNode
*
m_pLeft;
//
left child of node
BSTreeNode
*
m_pRight;
//
right child of node
}
;
void
BSTree2DuLink(BSTreeNode
*
pNode, BSTreeNode
*
pLeft, BSTreeNode
*
pRight)
{
if
(pNode
->
m_pLeft
!=
NULL)
{
BSTree2DuLink(pNode
->
m_pLeft, pLeft, pNode);
}
else
{
if
(pLeft
!=
NULL)
{
pNode
->
m_pLeft
=
pLeft;
pLeft
->
m_pRight
=
pNode;
}
}
if
(pNode
->
m_pRight
!=
NULL)
{
BSTree2DuLink(pNode
->
m_pRight, pNode, pRight);
}
else
{
if
(pRight
!=
NULL)
{
pNode
->
m_pRight
=
pRight;
pRight
->
m_pLeft
=
pNode;
}
}
}
void
Test_BSTree2DuLink()
{
//
init tree
BSTreeNode node4; node4.m_nValue
=
4
; node4.m_pLeft
=
NULL; node4.m_pRight
=
NULL;
BSTreeNode node8; node8.m_nValue
=
8
; node8.m_pLeft
=
NULL; node8.m_pRight
=
NULL;
BSTreeNode node6; node6.m_nValue
=
6
; node6.m_pLeft
=
&
node4; node6.m_pRight
=
&
node8;
BSTreeNode node12; node12.m_nValue
=
12
; node12.m_pLeft
=
NULL; node12.m_pRight
=
NULL;
BSTreeNode node16; node16.m_nValue
=
16
; node16.m_pLeft
=
NULL; node16.m_pRight
=
NULL;
BSTreeNode node14; node14.m_nValue
=
14
; node14.m_pLeft
=
&
node12; node14.m_pRight
=
&
node16;
BSTreeNode root; root.m_nValue
=
10
; root.m_pLeft
=
&
node6; root.m_pRight
=
&
node14;
//
convert BSTree to DuLink
BSTree2DuLink(
&
root, NULL, NULL);
//
console out the double link list
BSTreeNode
*
p
=
&
root;
while
(p
->
m_pLeft
!=
NULL) p
=
p
->
m_pLeft;
while
(p
!=
NULL)
{
cout
<<
p
->
m_nValue
<<
"
"
;
p
=
p
->
m_pRight;
}
}
发表于 2011-05-26 13:25
沉思的狗
阅读(249)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2011年5月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
导航
BlogJava
首页
发新随笔
发新文章
联系
聚合
管理
统计
随笔: 115
文章: 1
评论: 86
引用: 0
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔档案
(115)
2015年1月 (1)
2011年5月 (12)
2011年4月 (2)
2010年9月 (2)
2010年8月 (4)
2009年9月 (1)
2009年6月 (1)
2009年3月 (1)
2008年6月 (1)
2008年1月 (2)
2007年7月 (2)
2007年6月 (2)
2007年5月 (4)
2007年4月 (1)
2007年1月 (1)
2006年12月 (1)
2006年11月 (2)
2006年10月 (2)
2006年9月 (3)
2006年8月 (6)
2006年7月 (1)
2006年6月 (2)
2006年5月 (10)
2006年4月 (50)
2006年3月 (1)
网址
http://blog.csdn.net/Unagain
v_JULY_v
搜索
积分与排名
积分 - 210075
排名 - 265
最新评论
1. re: 使用Policy文件来设置Java的安全策略[未登录]
ss
--啊啊
2. re: Jni中C++和Java的参数传递
老大,Long 是J啊,不是L啊,可害苦我了,赶紧改回来吧;
--cnhua5
3. re: Jni中C++和Java的参数传递
楼主,在jni里返回String和C++里获取的为什么不一样,比如在java里看到的值是57891234,在C++里显示的是5789@,这是为什么啊?
--chr
4. re: 螺旋数字与坐标
对我的项目很有帮助。
谢谢
--cs221313
5. re: Jni中C++和Java的参数传递
long的符号表写错了,作为初学者亚历山大啊
--hhhhhh
阅读排行榜
1. Jni中C++和Java的参数传递 (63462)
2. 本地计算机上的 MSSQLSERVER 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务。[用批处理解决](22455)
3. 使用Policy文件来设置Java的安全策略(10484)
4. 一个简单的十六进制计算器(出自Win程序设计)(8739)
5. VC++6.0 全部默认快捷键(6200)
评论排行榜
1. Upload Server (HTTP 上传服务JAVA程序) 速度极快(11)
2. Jni中C++和Java的参数传递 (10)
3. 垃圾软件反删除批处理文件 (7)
4. 刚写的八皇后问题 - 递归 (随便你定义几个皇后了)JAVA(4)
5. 火车运煤问题(4)
[ThinkingDog]是一个积极向上、乐观、热心的人。