【剑指offer26 二叉搜索树与双向链表】

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
 
1.两个节点指针cur、pre(初始null)
2.先向左找打最小的
3.再递归找右边的的
4.双向链表,那left指向pre   pre->right指向cur
 
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    void fun(TreeNode *cur , TreeNode *&pre){ //一定得加上引用 因为pre动态变化
        if(!cur)return ;
        fun(cur->left , pre);//一直往左 找到当前最小
        cur->left = pre ; //小的在前
        if(pre)pre->right = cur ; //逆序指针
        pre = cur ;
        fun(cur->right,pre); //再往右递归
    }
    
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(!pRootOfTree)return nullptr;
        TreeNode *pre = nullptr ;
        fun(pRootOfTree,pre);
        TreeNode *ans = pRootOfTree;
        while(ans->left)ans=ans->left;
        
        return ans;
    }
};
原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13129569.html