二叉排序树转双向链表
来源:互联网 发布:ubuntu 调整分区大小 编辑:程序博客网 时间:2024/05/18 01:07
思路:用一个全局变量指针记录前一个节点,在中序遍历的过程中,用记录的前一个节点指针来调整指针指向。
#include <iostream>// 1:构造二叉查找树;// 2:中序遍历二叉查找树,因此结点按从小到大顺序访问,假设之前访问过的结点已经调整为一个双向链表,那么// 只需要将当前结点连接至双向链表的最后一个结点即可,访问完后,双向链表也就调整完了#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 addBSTreeNode(BSTreeNode *&pCurrent,int value);void inOrderBSTree(BSTreeNode* pBSTree);void convertToDoubleList(BSTreeNode* pCurrent);BSTreeNode *pHead=NULL;//指向循环队列头结点BSTreeNode *pIndex=NULL;//指向前一个结点int main(){ BSTreeNode *pRoot=NULL; addBSTreeNode(pRoot,10); addBSTreeNode(pRoot,6); addBSTreeNode(pRoot,14); addBSTreeNode(pRoot,4); addBSTreeNode(pRoot,8); addBSTreeNode(pRoot,12); addBSTreeNode(pRoot,16); inOrderBSTree(pRoot); return 0;}/************************************************************************//* 建立二叉排序树 */void addBSTreeNode(BSTreeNode *&pCurrent,int value)//在这个函数中会要改变指针值,一定要记得使用引用传递{ if (pCurrent==NULL) { BSTreeNode* pBSTree=new BSTreeNode(); pBSTree->m_nValue=value; pBSTree->m_pLeft=NULL; pBSTree->m_pRight=NULL; pCurrent=pBSTree; } else if (pCurrent->m_nValue<value) { addBSTreeNode(pCurrent->m_pRight,value); } else if (pCurrent->m_nValue>value) { addBSTreeNode(pCurrent->m_pLeft,value); } else { cout<<"node repeated"<<endl; }}/************************************************************************//************************************************************************//* 中序遍历二叉树,同时调整结点指针 */void inOrderBSTree(BSTreeNode* pBSTree){ if (NULL==pBSTree) { return; } if (NULL!=pBSTree->m_pLeft) { inOrderBSTree(pBSTree->m_pLeft); } // if (NULL!=pBSTree) // { // cout<<pBSTree->m_nValue; // } convertToDoubleList(pBSTree); if (NULL!=pBSTree->m_pRight) { inOrderBSTree(pBSTree->m_pRight); }}/************************************************************************//************************************************************************//* 调整结点指针 */void convertToDoubleList(BSTreeNode* pCurrent){ pCurrent->m_pLeft=pIndex;//使当前结点的左指针指向双向链表中最后一个结点 if (NULL==pIndex)//若最后一个元素不存在,此时双向链表尚未建立,因此将当前结点设为双向链表头结点 { pHead=pCurrent; } else//使双向链表中最后一个结点的右指针指向当前结点 { pIndex->m_pRight=pCurrent; } pIndex=pCurrent;//将当前结点设为双向链表中最后一个结点 cout<<pCurrent->m_nValue<<" ";}
阅读全文
0 0
- 二叉排序树转双向链表
- 二叉排序树转双向链表
- 二叉排序树和双向链表
- 面试题27:二叉排序树转双向链表
- 剑指Offer-27-二叉排序树转双向链表
- 【100题】二叉排序树转成双向链表
- 二叉排序树向双向链表的转换
- 二叉排序树转化为有序双向链表
- 二叉排序树转化为双向链表
- 二叉排序树换成一个双向链表
- 二叉排序树转化为双向链表
- 二叉排序树与双向链表的转换
- 把二叉排序树变成排序的双向链表
- 【100题】二叉排序树转成双向链表----中序遍历法
- 将二叉排序树BST转换成排序的双向链表
- 二叉排序树转换成排序的双向链表
- 二叉排序树转换成排序的双向链表
- 1.1把二叉排序树转变成排序的双向链表
- CSS3中translate、transform和translation的区别和联系
- Linux下切换Python2和Python3的4种方法
- %00经过urldecode之后成什么鬼字符
- Java基础-return、break、continue在循环中的作用
- 《C语言及程序设计初步》_1.4C语言程序初体验_实践5——圆柱体的表面积
- 二叉排序树转双向链表
- 欢迎使用CSDN-markdown编辑器
- 本地文件的读和写
- Linux C编程学习笔记(3):read、write、lseek函数及文件读写和文件读写指针的移动操作
- 261. Graph Valid Tree
- 设计模式
- 323. Number of Connected Components in an Undirected Graph
- thread05
- Mysql大小写敏感问题