[剑指offer][面试题27]二叉搜索树与双向链表

来源:互联网 发布:js漂浮广告带关闭 编辑:程序博客网 时间:2024/05/15 13:27

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

#include <iostream>using namespace std;struct Node{int   m_nData;Node *m_pLeft;Node *m_pRight;};void convertCore(Node *pRoot, Node** ppLastNode){if (pRoot==NULL){return;}if (pRoot->m_pLeft){convertCore(pRoot->m_pLeft, ppLastNode);}pRoot->m_pLeft = *ppLastNode;if (*ppLastNode){(*ppLastNode)->m_pRight = pRoot;}*ppLastNode = pRoot;if (pRoot->m_pRight){convertCore(pRoot->m_pRight, ppLastNode);}}Node* convertBSTreeToBiDirectList(Node *pRoot){if (pRoot==NULL){return NULL;}Node *pLastNode = NULL;convertCore(pRoot, &pLastNode);while (pLastNode && pLastNode->m_pLeft){pLastNode = pLastNode->m_pLeft;}return pLastNode;}int main(){Node *node1 = new Node; node1->m_nData = 10;  Node *node2 = new Node; node2->m_nData = 6;  Node *node3 = new Node; node3->m_nData = 14;  Node *node4 = new Node; node4->m_nData = 4;  Node *node5 = new Node; node5->m_nData = 8;  Node *node6 = new Node; node6->m_nData = 12;  Node *node7 = new Node; node7->m_nData = 16;  node1->m_pLeft = node2; node1->m_pRight = node3;  node2->m_pLeft = node4; node2->m_pRight = node5;  node3->m_pLeft = node6; node3->m_pRight = node7;  node4->m_pLeft = NULL; node4->m_pRight = NULL;  node5->m_pLeft = NULL; node5->m_pRight = NULL;  node6->m_pLeft = NULL; node6->m_pRight = NULL;  node7->m_pLeft = NULL; node7->m_pRight = NULL;  Node *pListNode = convertBSTreeToBiDirectList(node1);while (pListNode){cout<<pListNode->m_nData<<" ";pListNode = pListNode->m_pRight;}cout<<endl;}