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

原创 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);
    }
};

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

相关文章推荐

二叉树8:寻找错误结点练习题

二叉树8:寻找错误结点练习题

数据结构与算法分析笔记与总结(java实现)--二叉树8:寻找错误结点练习题

数据结构与算法分析笔记与总结(java实现)--二叉树8:寻找错误结点练习题

数据结构学习之路-第二章:带头结点的线性链表

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 前言: 终于讲到书中的最后一个链表了,前面我们一步一步的介绍了顺序表,单...

错误总结:无头结点链表的创建(二级指针)

错误总结:无头结点链表的创建(二级指针)无头结点链表的创建(二级指针)这是上次关于无头链表的操作的所有操作,这些是通过传链表头指针本身(一级指针)所做的操作(其实忘记写释放链表的操作,这是个大问题,不...
  • men_wen
  • men_wen
  • 2016年10月24日 22:28
  • 309

iFix Webspace在XP下发布网络结点时出现未配置网络节点错误

 iFixWebSpace故障Hi there, I am trying to setup a new system with iFixWebSpace.您好,我想设置一个新的系统与iFixWebSp...
  • jbnie
  • jbnie
  • 2011年01月07日 09:41
  • 3113

Oracle学习之路の常见错误

最近需要写存储过程,总结下自己曾经遇到的问题.总结是按照目前遇到的问题写的,难免有不周到的地方,还望各位看官海涵....

Python成长之路(四)——循环设计、循环对象、函数对象、错误处理、动态类型

Python成长之路(四)——循环设计、循环对象、函数对象、错误处理、动态类型...

面试之路(24)-提高代码的规范性,完整性,错误处理

规范性 通常代码都不超过50行,重要的是形成清晰的思路,写的清晰 当代码的逻辑比较复杂时候,适当的缩进,注释,可以体改可读性 用完整的英文单词组合来表示变量和函数,让别人一眼看清意图 完整性 普通测试...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【刷题之路】寻找错误结点
举报原因:
原因补充:

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