Leetcode 99恢复二叉搜索树 C++

思路:按照中序遍历将root遍历一遍,并将每个位置的地址和该节点的值分别保存到数组中。然后将保存节点值的数组从小到大排序,按地址的顺序赋给每个节点即可。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void recoverTree(TreeNode* root) {
        vector<TreeNode*> list;
        vector<int> value;
        inorder(root,list,value);
        sort(value.begin(),value.end());
        for(int i=0;i<value.size();++i)
        {
            list[i]->val=value[i];
        }
    }
    void inorder(TreeNode* root,vector<TreeNode*> &list,vector<int> &value)
    {
        if(!root) return ;
        inorder(root->left,list,value);
        list.push_back(root);
        value.push_back(root->val);
        inorder(root->right,list,value);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43387999/article/details/87829526
今日推荐