博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉排序树转换成排序的双向链表
阅读量:6934 次
发布时间:2019-06-27

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

输入:一棵二叉排序树

输出:双向链表

要求:不能创建任何新的结点,只调整指针的指向。

算法设计思想:

  • 构造一棵二叉排序树。
  • 中序遍历二叉排序树,在访问结点时调整成一个双向链表的结点,即将其左右孩子指针转化成前驱和后继指针。

源码如下

1 #include"stdafx.h" 2 #include 
3 using namespace std; 4 5 struct BSTNode 6 { 7 int m_Value; 8 BSTNode *leftChild; 9 BSTNode *rightChild;10 11 };12 13 void AddBSTNode(BSTNode *&pNode, int value);14 void InorderBST(BSTNode *BST);15 void ConvertToDLinkList(BSTNode *pNode);16 BSTNode *pHead = nullptr;17 BSTNode *preNode = nullptr;18 19 int main()20 {21 BSTNode *pRoot = nullptr;22 AddBSTNode(pRoot, 10);23 AddBSTNode(pRoot, 6);24 AddBSTNode(pRoot, 14);25 AddBSTNode(pRoot, 4);26 AddBSTNode(pRoot, 8);27 AddBSTNode(pRoot, 12);28 AddBSTNode(pRoot, 16);29 BSTNode *tmpRoot = pRoot;30 InorderBST(tmpRoot);31 }32 33 void AddBSTNode(BSTNode *&pNode, int value)34 {35 if (pNode == nullptr)36 {37 BSTNode *tempNode = new BSTNode();38 tempNode->m_Value = value;39 tempNode->leftChild = nullptr;40 tempNode->rightChild = nullptr;41 pNode = tempNode;42 }43 else if (pNode->m_Value < value)44 {45 AddBSTNode(pNode->rightChild, value);46 }47 else if (pNode->m_Value > value)48 {49 AddBSTNode(pNode->leftChild, value);50 }51 else52 {53 cout << "该结点已经存在,勿重复添加\n";54 }55 }56 57 void InorderBST(BSTNode *BST)58 {59 if (BST == nullptr)60 return;61 InorderBST(BST->leftChild);62 //cout << BST->m_Value;63 ConvertToDLinkList(BST);64 InorderBST(BST->rightChild);65 }66 67 void ConvertToDLinkList(BSTNode *pNode)68 {69 pNode->leftChild = preNode;70 if (nullptr == preNode)71 {72 pHead = pNode;73 }74 else75 {76 preNode->rightChild = pNode;77 }78 preNode = pNode;79 cout << pNode->m_Value << ' ';80 }

 

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

你可能感兴趣的文章
html input="file" 浏览时只显示指定文件类型 xls、xlsx、csv
查看>>
Android Export aborted because fatal error were fo
查看>>
在window平台下模拟Liunx使用GCC环境进行编译C的SO库。
查看>>
原来一直纠结MQ的用法,今天看到了一个最经典的例子。
查看>>
Resource is out of sync with the file system的解决办法
查看>>
交叉编译openssl不修改Makefile的方法
查看>>
linux 常用流量查看命令
查看>>
VMware ESXi Windows虚拟机磁盘扩展小结
查看>>
Linux常用命令
查看>>
方便的将数字转成字符串类型并在前面补0
查看>>
mysql主从复制
查看>>
宫崎骏首次因为自己的新作流泪
查看>>
SAP sybase16 安装的一些细节问题
查看>>
linux服务器同步时间
查看>>
Android开发常见问题及解决方法
查看>>
Linux 基础 - 磁盘管理 - 01
查看>>
我的友情链接
查看>>
繁忙的IT基础设施可能导致安全灾难
查看>>
Objective-C之Block
查看>>
iOS 图片加载框架-SDWebImage 解读
查看>>