qingcheng奕  

https://oj.leetcode.com/problems/recover-binary-search-tree/

一棵二叉搜索树,二叉搜索树的特征是,中根遍历的话,得到的序列是递增的

题目中,有两个节点弄混了,让恢复这个二叉搜索树 

class Solution {
public:
    TreeNode *LastNode = new TreeNode(INT_MIN);
    
    void recoverTree(TreeNode *root) {
        if(root == NULL)
            return;
        
        TreeNode **n1 = (TreeNode**)malloc(sizeof(TreeNode*));
        TreeNode **n2 = (TreeNode**)malloc(sizeof(TreeNode*));
	*n1 = NULL;
	*n2 = NULL;
        find(root,n1,n2);
        //swap
        int temp;
	temp = (*n1)->val; (*n1)->val = (*n2)->val; (*n2)->val = temp;
    }
    
    //中根遍历
    void find(TreeNode *root, TreeNode **n1, TreeNode **n2) 
    {
        if(root == NULL)
            return;
            
        find(root->left,n1,n2);
        
//分别处理了是 2 1 还是,3 2 1 的情况,高! if(*n1 == NULL && root->val < LastNode->val) { *n1 = LastNode; } if(*n1 != NULL && root->val < LastNode->val) { *n2 = root; } LastNode = root; find(root->right,n1,n2); } };

  

posted on 2014-07-27 15:34  qingcheng奕  阅读(119)  评论(0编辑  收藏  举报