二叉搜索树与双向链表
    题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/
    图片.png
    思路:关键在于如何建立二叉搜索树与排序双向链表之间的关系。排序链表的建立可以视为一组数字从小到大依次指向下一个数字节点,因此对应到二叉搜索树上就是中序遍历。

    • 每一次操作都是pre的右指针指向curr,curr的左指针指向pre
    • 注意头尾指针要单独处理,当中序遍历递归结束时pre即为最后一个节点

    参考代码:

    1. class Solution {
    2. private:
    3. Node* pre;
    4. Node* head;
    5. public:
    6. Node* treeToDoublyList(Node* root) {
    7. if (!root) {
    8. return NULL;
    9. }
    10. dfs(root);
    11. head->left = pre;
    12. pre->right = head;
    13. return head;
    14. }
    15. void dfs(Node* curr) {
    16. if (!curr) {
    17. return;
    18. }
    19. dfs(curr->left);
    20. if (!pre) {
    21. head = curr;
    22. }
    23. else {
    24. pre->right = curr;
    25. }
    26. curr->left = pre;
    27. pre = curr;
    28. dfs(curr->right);
    29. }
    30. };