Recursion temp如何访问丢失的数据 我已经将temp声明为public(在递归堆栈之外)。在外部声明temp的主要思想是,每当我发现一个不满足bst条件的地方,我就将特定地址分配到temp中,所以当我想要交换数据时,我就按照问题所述交换数据 查询:我正在使用递归堆

Recursion temp如何访问丢失的数据 我已经将temp声明为public(在递归堆栈之外)。在外部声明temp的主要思想是,每当我发现一个不满足bst条件的地方,我就将特定地址分配到temp中,所以当我想要交换数据时,我就按照问题所述交换数据 查询:我正在使用递归堆,recursion,tree,Recursion,Tree,temp如何访问丢失的数据 我已经将temp声明为public(在递归堆栈之外)。在外部声明temp的主要思想是,每当我发现一个不满足bst条件的地方,我就将特定地址分配到temp中,所以当我想要交换数据时,我就按照问题所述交换数据 查询:我正在使用递归堆栈,并且我将地址分配给了temp,但是当我从堆栈中出来时,我如何能够访问特定的地址,因为当我们完成堆栈时,堆栈变为空。 对于测试用例[1,2,3],它给出了输出[2,1,3] 请帮帮我 类解决方案{ 公众: TreeNode*temp=NULL

temp如何访问丢失的数据 我已经将temp声明为public(在递归堆栈之外)。在外部声明temp的主要思想是,每当我发现一个不满足bst条件的地方,我就将特定地址分配到temp中,所以当我想要交换数据时,我就按照问题所述交换数据 查询:我正在使用递归堆栈,并且我将地址分配给了temp,但是当我从堆栈中出来时,我如何能够访问特定的地址,因为当我们完成堆栈时,堆栈变为空。 对于测试用例[1,2,3],它给出了输出[2,1,3]
请帮帮我
类解决方案{
公众:
TreeNode*temp=NULL;
布尔标志=真;
无效检查(TreeNode*根、长低位、长高位){
if(root==NULL)返回;
如果(root->val>=low&&root->valleft,low,root->val);
如果(标志)检查(根->右,根->值,高);
}
否则{
flag=false;
温度=根;
}
如果(温度!=NULL&&temp->val>=low&&temp->valval;
温度->值=根->值;
根->val=te;
}
返回;
}
无效恢复树(树节点*根){
if(root==NULL)返回;
检查(根、长最小值、长最大值);
}
};

我不完全清楚你在这里做什么(或试图做什么).原则上,通过
temp
引用树节点是可以的,因为它不是指堆栈本身,而是指实际的树节点,但请注意,您从未将
temp
设置回
NULL
,因此一旦在任何位置设置了值,当递归调用中的逻辑返回到更高级别时,仍然会设置该值。
class Solution {
public:
    TreeNode *temp=NULL;
    bool flag=true;
    void check(TreeNode* root,long low,long high){
        if(root==NULL)return ;
        
        if(root->val>=low&&root->val<=high){
            if(flag)check(root->left,low,root->val);
            if(flag)check(root->right,root->val,high);
        }
        else{
            flag=false;
            temp=root;
        }
        if(temp!=NULL&&temp->val>=low&&temp->val<=high){
            int te=temp->val;
            temp->val=root->val;
            root->val=te;
            
        }
        return ;
    }
    void recoverTree(TreeNode* root) {
        if(root==NULL)return ;
        
        check(root,LONG_MIN,LONG_MAX);
    }
};