zoukankan      html  css  js  c++  java
  • leetcode

    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?

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    struct TreeNode
    {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    class Solution {
    public:
        void recoverTree(TreeNode *root) {
    		 pre = n1 = n2 = NULL;
    		 dfs(root);
    		 n1->val ^= n2->val;
    		 n2->val ^= n1->val;
    		 n1->val ^= n2->val;
        }
    private:
    	TreeNode *pre,*n1,*n2;
    	void dfs(TreeNode *root)
    	{
    		if(root == NULL) return;
    		dfs(root->left);
    		if(pre != NULL &&pre->val > root->val)
    		{
    			n1 = root;
    			if(n2 == NULL) n2 = pre;
    		}
    		pre = root;
    		dfs(root->right);
    	}
    };


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    CF 986A Fair——多源bfs
    poj3539 Elevator——同余类bfs
    poj3463 Sightseeing——次短路计数
    poj2262 Goldbach's Conjecture——筛素数
    Kruskal算法
    Prim算法
    离散化
    最短路(hdu2544)
    最短路径问题
    Servlet
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4655714.html
Copyright © 2011-2022 走看看