33.二叉搜索树与双向链表

2019-08-06  本文已影响0人  HamletSunS

题目:
把二叉搜索树转换成一个有序的双向链表,即左孩子指向上一个节点,右孩子指向下个节点,要求原地修改,不能创建新的链表。
思路:

难点:

class Solution {
public:
    // 主方法
    TreeNode* Convert(TreeNode* root)
    {
        if(!root)
            return nullptr;
        getLink(root);
        return ret;
    }
   //中序遍历
    void getLink(TreeNode *root){
        if(!root)
            return ;
        getLink(root->left);
        //两个都为空,说明当前节点是中序遍历的第一个节点
        if(head==nullptr && ret==nullptr){
            head=root;
            ret=root;
        }
//不是第一个节点,那么root是当前访问的节点,head是root的上一个节点
        else{
            head->right=root;
            root->left=head;
            head=root;
        }
        getLink(root->right);
    }
    private:
    //head用来存放中序遍历过程中的上一个节点
    TreeNode *head=nullptr;
//ret用来存放根节点,作为返回结果
    TreeNode *ret=nullptr;
};
上一篇 下一篇

猜你喜欢

热点阅读