描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
思路:中序遍历
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
TreeNode* curNode = nullptr;
TreeNode* pHead = nullptr;//存链表的头节点
TreeNode* Convert(TreeNode* pRootOfTree) {
if (pRootOfTree == nullptr)
return nullptr;
Convert(pRootOfTree->left);
if (curNode == nullptr)
{
curNode = pRootOfTree;
pHead = pRootOfTree;// 此时cur是最左侧的节点, 即根节点
}
else
{
curNode->right = pRootOfTree;//当前节点curNode的后继节点(right)是pRootOfTree
pRootOfTree->left = curNode;//pRootOfTree的前驱节点(left)是curNode
curNode = pRootOfTree;//将curNode向后移动
}
Convert(pRootOfTree->right);
return pHead;
}
};