• 99. Recover Binary Search Tree


    99. 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}". 
    

    解析

    class Solution_99 {
    public:
    	void recoverTree(TreeNode* root) {
    
    		TreeNode* first = NULL, *second = NULL, *parenet = NULL;
    		TreeNode*cur, *pre; //中序遍历
    		cur = root;
    
    		while (cur)
    		{
    			if (cur->left==NULL)
    			{
    				if (parenet&&parenet->val>cur->val)
    				{
    					if (!first)
    					{
    						first = parenet;
    					}
    					second = cur;
    				}
    				parenet = cur;
    				cur = cur->right;
    			}
    			else
    			{
    				pre = cur->left; //找到左子树的最右节点
    				while (pre->right&&pre->right!=cur)
    				{
    					pre = pre->right;
    				}
    
    				if (!pre->right)
    				{
    					pre->right = cur;
    					cur = cur->left;
    				}
    				else
    				{
    					pre->right = NULL; //恢复树结构
    					if (parenet&&parenet->val > cur->val)
    					{
    						if (!first)
    						{
    							first = parenet;
    						}
    						second = cur;
    					}
    					parenet = cur;
    					cur = cur->right;
    				}
    			}
    		}
    		if (first&&second)
    		{
    			swap(first->val, second->val);
    		}
    	}
    };
    
    

    题目来源

  • 相关阅读:
    while循环学习之统计流量
    MySQL的启动脚本
    UVA 725 Division
    UVA 712 S-tree
    UVA 514
    字典树
    UVA 1595 multimap 的应用
    C++ map 和 multimap
    浮点数
    UVA 227
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8831731.html
Copyright © 2020-2023  润新知