面试题27_二叉搜索树与双向链表

来源:互联网 发布:windows phone官网 编辑:程序博客网 时间:2024/04/29 18:02

题目描述


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


解题思路

采用中序遍历方法,注意指针指向。left指向小于当前值的数,right指向大于当前值的数。

利用pLast来指向当前转换好的链表的最大值,即最后一个节点。

首先转换左子树,其次,连接上根节点,之后,转换右子树。



实现代码

<span style="font-size:18px;">/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    TreeNode* Convert(TreeNode* pRootOfTree)    {        TreeNode *pLast = nullptr;        if(pRootOfTree == nullptr)            return nullptr;        ConvertTreeToList(pRootOfTree, &pLast);                TreeNode *pHead = pLast;        while(pHead->left != nullptr && pHead != nullptr)            pHead = pHead->left;                return pHead;    }        void ConvertTreeToList(TreeNode *root, TreeNode **pLast)    {        if(root == nullptr)            return;    TreeNode *pCurNode = root;                if(pCurNode->left != nullptr)            ConvertTreeToList(pCurNode->left, pLast);                pCurNode->left = *pLast;                if(*pLast != nullptr)            (*pLast)->right = pCurNode;                *pLast = pCurNode;                if(pCurNode->right != nullptr)            ConvertTreeToList(pCurNode->right, pLast);    }};</span>


1 0
原创粉丝点击