把二元查找树转变成排序的双向链表
2011-12-14 16:55
399 查看
//c/c++ /* 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 */ #include "stdafx.h" #include <iostream> using namespace std; struct TreeNode { int m_nValue; // value of node TreeNode *m_pLeft; // left child of node TreeNode *m_pRight; // right child of node }; typedef TreeNode DoubleList; DoubleList * pHead; DoubleList * pListIndex; //生成查找树 void adjust(TreeNode * & pCurrent, int value) { //根节点的处理,生成根节点,为pCurrent赋值 <span style="color:#FF0000;">重点理解:注意为传址,修改了main内的pRoot</span> if(NULL == pCurrent) { TreeNode *pEnd = new TreeNode(); pEnd ->m_pLeft =NULL; pEnd ->m_pRight = NULL; pEnd ->m_nValue = value; pCurrent = pEnd; } // else { //在左子树添加 if (value<pCurrent->m_nValue) { adjust(pCurrent->m_pLeft,value); } //在右子树添加 else if(value>pCurrent->m_nValue) { adjust(pCurrent->m_pRight,value); } else { cout<<" 重 复 的 节 点 "<<endl; } } } void addList(TreeNode *pCurrent); //covert the tree to link void covertTreeToLink(TreeNode *pCurrent) { //中序读出 if(pCurrent==NULL) { return; } //遍历左子树 if(NULL != pCurrent->m_pLeft) { covertTreeToLink(pCurrent->m_pLeft); } //将根节点加进链表 addList(pCurrent); //遍历右子树 if(NULL != pCurrent->m_pRight) { covertTreeToLink(pCurrent->m_pRight); } } //添加节点到链表 void addList(TreeNode *pCurrent) { if(NULL ==pListIndex) pHead = pListIndex; else { pCurrent->m_pLeft = pListIndex; pListIndex ->m_pRight = pCurrent; pListIndex = pCurrent;//指针后移 } cout<<"Now "<<pCurrent->m_nValue<<endl; } int main() { TreeNode * pRoot = NULL; pListIndex = NULL;//链表的移动指针 pHead = NULL;//链表的头指针 adjust(pRoot, 10); adjust(pRoot, 4); adjust(pRoot, 6); adjust(pRoot, 8); adjust(pRoot, 12); adjust(pRoot, 14); adjust(pRoot, 15); adjust(pRoot, 16); covertTreeToLink(pRoot); getchar(); return 0; }
相关文章推荐
- 转:把二元查找树转变成排序的双向链表
- To_10_r_100_0---把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表[数据结构]
- 二元查找树转变成排序的双向链表之C#算法实现
- 把二元查找树转变成排序的双向链表
- (微软100题)把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表--算法001
- 程序员面试题精选(01)-把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- 1.二元查找树转变成排序的双向链表
- 1.二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 练习1:把二元查找树转变成排序的双向链表
- [面试中的算法]把二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表