zoukankan      html  css  js  c++  java
  • Leetcode 99 恢复二叉树

    题目描述:

     题解:

      找规律,题目限制了只交换两个节点,那么在中序遍历的时候,用pre存中序遍历的前一个节点,如果当前节点(记为now)的值小于pre的值,那么now,pre中有一个是需要交换的节点。我们注意到,第一次出现上述情况的pre为需要交换的第一个节点,第二次出现上述情况的now节点为需要交换的第二个节点。当交换的节点为中序遍历中相邻的节点的时候,在比较的时候只会出现一次上述情况,将pre,now都记录下来即可。

    AC代码:

    class Solution {
    public:
        TreeNode* inorder(TreeNode* root)
        {
            if(root == NULL) return NULL;
            inorder(root->left);
           // if(pre != NULL )cout << pre->val <<endl;
            if(pre != NULL)
            {
                if(pre->val > root->val)
                {
                    if(flag == 0)
                    {
                        node = pre;
                        node2 = root;
                        flag = 1;
                    }
                    else 
                    {
                        node2 = root;
                        flag = 2;
                    }
                }
            }
            pre = root;
            TreeNode* end = inorder(root->right);
            if(end == NULL) return root;
            return end;
        }
    
    
        void recoverTree(TreeNode* root) {
            flag = 0;
            pre = NULL;
            node = NULL;
            node2 = NULL;
            inorder(root);
           // cout << node->val << endl;
           // cout << node2->val <<endl;
            int tmp = node->val;
            node->val = node2->val;
            node2->val = tmp;
        }
    private:
        int flag;
        TreeNode* node;
        TreeNode* node2;
        TreeNode* pre;
    };
  • 相关阅读:
    第5章 JDBC/ODBC服务器
    第4章 SparkSQL数据源
    第3章 SparkSQL解析
    第2章 执行SparkSQL查询
    第1章 Spark SQL概述
    Ubutun重启网卡
    Java面试通关要点汇总整理
    40道Java基础常见面试题及详细答案
    ListView
    数据库表及字段命名规范
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12346948.html
Copyright © 2011-2022 走看看