二叉搜索樹與雙向鏈表與樹的中序線索化

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32M,其他語言64M 熱度指數:418309

本題知識點: 鏈表 

 算法知識視頻講解

題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。要求返回頭結點,且最好是雙向循環鏈表

解答思路:

中序線索二叉樹改造實現簡化類習題,牛客網題目不明確且測試數據有問題,這個從頭到尾用的leetcode。

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;

    Node() {}

    Node(int _val) {
        val = _val;
        left = NULL;
        right = NULL;
    }

    Node(int _val, Node* _left, Node* _right) {
        val = _val;
        left = _left;
        right = _right;
    }
};
*/
class Solution {
    Node*pre=NULL;
    Node*first=NULL;
public:
    Node* treeToDoublyList(Node* pRootOfTree)
    {
        if(pRootOfTree==NULL){
            return NULL;
        }
        Convertdemo(pRootOfTree);
        pre->right=first;
        first->left=pre;
        return first;
    }
    void Convertdemo(Node* pRootOfTree)
    {
        if(pRootOfTree==NULL){
            return ;
        }
        Convertdemo(pRootOfTree->left);
        pRootOfTree->left=pre;
        if(pre!=NULL)pre->right=pRootOfTree;
        else{
            first=pRootOfTree;
        }
        pre=pRootOfTree;
        Convertdemo(pRootOfTree->right);
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章