[编程之美-02]把二元查找树变成为排序的双向链表
2016-10-18 11:50
351 查看
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表:
4=6=8=10=12=14=16。
首先我们定义的二元查找树节点的数据结构如下:
主要考察:二叉树的中序遍历算法的思想.
代码如下:
要求不能创建任何新的结点,只调整指针的指向。
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<stdio.h> using namespace std; struct BSTreeNode { int m_nValue; BSTreeNode *m_pleft; BSTreeNode *m_pright; }; typedef struct BSTreeNode DoubleList; DoubleList *pHead, *pListIndex; void convertToDoubleList(BSTreeNode *pCurrent); void addBSTreeNode(BSTreeNode *&pCurrent, int value); void ergodicBSTree(BSTreeNode *pCurrent); int main() { BSTreeNode *pRoot = NULL; pListIndex = NULL; pHead = NULL; addBSTreeNode(pRoot, 10); addBSTreeNode(pRoot, 4); addBSTreeNode(pRoot, 6); addBSTreeNode(pRoot, 8); addBSTreeNode(pRoot, 12); addBSTreeNode(pRoot, 14); addBSTreeNode(pRoot, 15); addBSTreeNode(pRoot, 16); ergodicBSTree(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_pleft, value); else if((pCurrent->m_nValue) < value) addBSTreeNode(pCurrent->m_pright, value); } } void ergodicBSTree(BSTreeNode *pCurrent) { if(pCurrent == NULL) return ; if(pCurrent->m_pleft != NULL) ergodicBSTree(pCurrent->m_pleft); convertToDoubleList(pCurrent); if(pCurrent->m_pright != NULL) ergodicBSTree(pCurrent->m_pright); } void convertToDoubleList(BSTreeNode *pCurrent) { pCurrent->m_pleft = pListIndex; if(pListIndex != NULL) pListIndex->m_pright = pCurrent; else pHead = pCurrent; pListIndex = pCurrent; cout<<pCurrent->m_nValue<<endl; }
相关文章推荐
- [编程之美-11]把二元查找树变成为排序的双向链表
- 关于把二元查找树变成排序的双向链表算法的理解
- 二元查找树变成排序的双向链表
- 微软编程题-把二元查找树变成排序的双向链表
- 程序员面试100题之一,把二元查找树变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 转载 把二元查找树转变成排序的双向链表
- 【转】100题题1解——把二元查找树转变成排序的双向链表
- (程序员面试题精选(01))把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 面试100题:1 把二元查找树转变成排序的双向链表
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 1.二元查找树转变成排序的双向链表
- 练习系列 - 1、把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 1、把二元查找树转变成排序的双向链表
- 练习1:把二元查找树转变成排序的双向链表