zoukankan      html  css  js  c++  java
  • Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake.

    Recover the tree without changing its structure.

    Note:
    A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

     

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / 
     2   3
        /
       4
        
         5
    
    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
    修正二叉树中错误的两个结点,在不改变结构的情况下。
    思路:首先想到的就是中序遍历二叉搜索树,中序遍历二叉搜索树的结点是按从小到大的顺序,如果出现该节点值比前一个结点小,则说明这个值不合法。用pPre存中序遍历的前一个结点,方便比较大小,first和second分别保存较大的和较小的值。
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        void recoverMistake(TreeNode *root,TreeNode *&first,TreeNode *&second,TreeNode *&pPre)
        {
            if(root==NULL)
                return;
            recoverMistake(root->left,first,second,pPre);
            if(pPre && pPre->val>root->val)
            {
                if(first==NULL)
                {
                    first=pPre;
                    second=root;
                }
                else
                {
                    second=root;
                }
            }
            pPre=root;
            recoverMistake(root->right,first,second,pPre);
        }
        void recoverTree(TreeNode *root) {
            TreeNode *first=NULL,*second=NULL,*pPre=NULL;
            recoverMistake(root,first,second,pPre);
            swap(first->val,second->val);
        }
    };
  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/awy-blog/p/3724868.html
Copyright © 2011-2022 走看看