[剑指 offre] JT26 --- Arbre de recherche binaire et liste doublement chaînée (après avoir réfléchi pendant quelques jours, c'est une question assez abstraite)

La vingt-sixième question de l'offre

Le sujet est le suivant

Entrez un arbre de recherche binaire et convertissez l'arbre de recherche binaire en une liste triée doublement liée. Il est nécessaire qu'aucun nouveau nœud ne puisse être créé, mais seul le point du pointeur de nœud dans l'arbre peut être ajusté.
Quelle question simple, mais ça me fait tellement mal!

L'idée et le code sont les suivants

Maintenant ma compréhension personnelle est relativement superficielle, c'est la traversée de l'ordre du milieu.Après
l'analyse de la structure récursive, je vais la mettre à
jour.Après tout, cette question est bloquée depuis quelques jours, alors écrivez-la d'abord.

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
    
    
public:
    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);
    }
};

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_42136832/article/details/114794645
conseillé
Classement