【刷题之路】寻找错误结点

原创 2016年05月31日 21:28:43

一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值。保证二叉树中结点的值各不相同。

给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前。

二叉搜索树按照中序遍历应该是一个升序数组,如果有错位节点,包括两种情况

情况1:1 5 3 4 2 ,其中共有两次降序数字对,分别为5 3与4 2,只要取第一对的较大数字与第二对的较小数字即可

情况2:1 2 4 3 5,其中只有一对降序数字,则直接返回即可。

class FindErrorNode {
public:
    vector<int> findError(TreeNode* root) {
        // write code here
        vector<int> temp;
        vector<int> res;
        midtree(root,temp);
        int p1,p2;
        int i,j;
        for(i=0;i<temp.size()-1;i++){   
            if(temp[i]>temp[i+1]){ //出现第一对降序数字对,存下来
                p1=temp[i];
                p2=temp[i+1];
                for(j=i+1;j<temp.size()-1;j++){  //在之后寻找第二对降序数字对,更新第二个数为第二对中较小的数字
                    if(temp[j]>temp[j+1]){
                        p2=temp[j+1];
                    }
                }
                break; //跳出循环
            }
        }
        res.push_back(p2); //p2小于p1
        res.push_back(p1);
        return res;
    }
    void midtree(TreeNode* root,vector<int> &res){  //递归法中序遍历二叉树
        if(root==NULL) return;
        midtree(root->left,res);
        res.push_back(root->val);
        midtree(root->right,res);
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python 刷题(想练python的可以对着刷一刷,持续更新)

这道题的意思是说
  • geniusluzh
  • geniusluzh
  • 2014年04月23日 10:36
  • 7656

leetcode刷题经验

语言不是最重要的,思想最重要从做上面的题,我发现我更擅长一些数学技巧不高的程序题,习惯靠直觉立马书写代码,而非严格推理之后,再书写代码对于链表的题比较擅长,链表可以在纸上画画,关键要考虑的问题,就是链...
  • basycia
  • basycia
  • 2016年02月28日 15:31
  • 1343

谈谈程序员面试之刷题

前一段时间有一个非常有趣的故事(http://www.pingwest.com/sorry-cant-hire-you/  ),Max Howell (Homebrew的作者) 在 Google 面试...
  • github_39335046
  • github_39335046
  • 2017年06月29日 17:03
  • 1679

LeetCode刷题指南(一)

以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目前,已经有321个问题了。对于大多数人来说,没有时间也没有必要把所有题目都做一遍(时间充裕可以随意)。刷个100题左...
  • Lnho2015
  • Lnho2015
  • 2016年03月23日 15:02
  • 37986

比较好的刷题网站推荐

http://www.cnblogs.com/DarrenChan/p/5648422.html 1.Leetcode鼎鼎大名的Leetcode,据不完全统计在上面被刷过的题可以围绕地球...
  • dipolar
  • dipolar
  • 2017年03月09日 11:56
  • 728

bzoj刷题(shui)记录

放假刷了一个月的水题,集中写一下题解吧。bzoj1858:线段树随便维护一下。 code bzoj2705:莫比乌斯反演裸题。 code bzoj1202:并查集,但是我写了一种跟floyd很像的...
  • FZHvampire
  • FZHvampire
  • 2015年08月31日 11:26
  • 1642

手把手教你用C++ 写ACM自动刷题神器(冲入HDU首页)

少年,作为苦练ACM,通宵刷题的你 是不是想着有一天能够荣登各大OJ榜首,俯瞰芸芸众生,唔....要做到这件事情可是需要一定天赋的哦! 博主本身也搞过一段时间的acm,对刷题深有感触,不信可以去看我...
  • qq_28954601
  • qq_28954601
  • 2016年04月24日 10:12
  • 2111

topcoder 刷题笔录 初级篇(一)

摘要:本系列文章为在topcoder上的刷题记录和心得,计划刷题500道。其中,初级题目30道,撰文三篇;中级题目60道,撰文六篇;其他高级题目100道,撰文10篇。 1.题目1——SRM146 ...
  • trochiluses
  • trochiluses
  • 2013年12月20日 16:00
  • 2547

一、简单刷题APP(题库是Excel)之项目功能和效果图

这是本人的第一篇博客,自己也是菜鸟,如有不妥之处,欢迎指教,谢谢了。只是想借此机会自己也整理一下笔记。 在此想感谢各位牛人还有这个平台,我在学习和做项目的过程中遇到了很多问题,CSDN博客大都能解决...
  • qq_35638837
  • qq_35638837
  • 2017年04月03日 14:16
  • 674

操作系统刷题(一)

1.  UNIX操作系统是一种多用户分时操作系统,可用于PC机。 2.分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响...
  • alwaystry
  • alwaystry
  • 2017年06月03日 22:47
  • 392
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】寻找错误结点
举报原因:
原因补充:

(最多只允许输入30个字)