把二元查找树转变成排序的双向链表
来源:互联网 发布:淘宝特卖会 编辑:程序博客网 时间:2024/06/15 23:37
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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>#include <vector>using namespace std;struct BSTreeNode{ int m_nValue; BSTreeNode *m_pLeft; BSTreeNode *m_pRight;};BSTreeNode* createNode(int num){ BSTreeNode* node = (BSTreeNode*)malloc(sizeof(BSTreeNode)); if(!node) return NULL; node->m_nValue = num; node->m_pLeft = NULL; node->m_pRight = NULL; return node;}BSTreeNode* createTree(){ BSTreeNode* root = createNode(10); root->m_pLeft = createNode(6); root->m_pRight = createNode(14); root->m_pLeft->m_pLeft = createNode(4); root->m_pLeft->m_pRight = createNode(8); root->m_pRight->m_pLeft = createNode(12); root->m_pRight->m_pRight = createNode(16); return root;}//中序遍历void middleTraverse(BSTreeNode* root, vector<BSTreeNode* > &vec){ if(root == NULL) return; middleTraverse(root->m_pLeft,vec); vec.push_back(root); middleTraverse(root->m_pRight,vec);}int main(){ BSTreeNode* root = createTree(); vector<BSTreeNode*> vec; middleTraverse(root, vec); BSTreeNode* pHead = *(vec.begin()); for(vector<BSTreeNode*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { if(iter == vec.end() -1) (*iter)->m_pRight = NULL; else (*iter)->m_pRight = *(iter+1); if(iter == vec.begin()) (*iter)->m_pLeft = NULL; else (*iter)->m_pLeft = *(iter-1); } for(BSTreeNode* temp = pHead; temp != NULL; temp = temp->m_pRight) cout<<temp->m_nValue<<" "; cout<<endl; return 0;}
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- .把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- CCDirector类详解
- MySQL实用语句大全
- ee.h
- listview小结
- 将s3c2416配制成路由器
- 把二元查找树转变成排序的双向链表
- 送给初学者:浅谈面向过程与面向对象
- surf特征+FLANN特征匹配+knn筛选匹配点+单应性矩阵映射
- othr.c
- 启动服务 OracleMTSRecoveryService 的请求超时
- Android开发的一些好的技术博文推荐
- CCNode类详解
- [UIPopoverController dealloc] reached while popover is still visible.'
- 找工作笔试面试那些事儿(7)---测试题答案