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);
}
};