搜索二叉树变换为双向链表

 
TreeNode* Convert(TreeNode* pRootOfTree)
     {
         if (pRootOfTree == nullptr)  return nullptr;
         TreeNode* pre = nullptr;
         
         convertHelper(pRootOfTree, pre);
         
         TreeNode* res = pRootOfTree;
         while (res ->left)
             res = res ->left;
         return res;
     }
     
     void convertHelper(TreeNode* cur, TreeNode*& pre)
     {
         if (cur == nullptr)  return ;
         
         convertHelper(cur ->left, pre);
         
         cur ->left = pre;
         if (pre) pre ->right = cur;
         pre = cur;
         
         convertHelper(cur ->right, pre);          
     }

--------------------------------------------------------------------------------------------------

class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(!pRootOfTree) return NULL;
        TreeNode* pre=NULL;
        ConvertHelp(pRootOfTree,pre);
        TreeNode* res=pRootOfTree;
        while(res->left)
            res=res->left;
        return res;
    }
private:
    void ConvertHelp(TreeNode* cur,TreeNode* &pre)
    {
        if(!cur) return;
        ConvertHelp(cur->left,pre);
        cur->left=pre;
        if(pre) pre->right=cur;
        pre=cur;
        ConvertHelp(cur->right,pre);
    }
    
};

猜你喜欢

转载自blog.csdn.net/qq_37668377/article/details/80351640