寻找错误结点练习
来源:互联网 发布:资源管理系统源码 编辑:程序博客网 时间:2024/05/18 21:40
一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值。保证二叉树中结点的值各不相同。
给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前。
只有两种情况,调换的两个数相邻,调换的两个数不相邻
如果两个数相邻,只有一次顺序反过来,要是不相邻有两次顺序反过来。最多两次,使用非递归方式的中序遍历即可。
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class FindErrorNode {public: vector<int> findError(TreeNode* root) { if(!root) return vector<int>{}; TreeNode* cur=root; stack<TreeNode*> sta; int min=INT_MIN; vector<int> res; vector<int> retu; while(!sta.empty()||cur) { while(cur) { sta.push(cur); cur=cur->left; } TreeNode* temp=sta.top(); if(temp->val<min) { res.push_back(min); res.push_back(temp->val); } min=temp->val; sta.pop(); cur=temp->right; } if(res.size()==2) { retu.push_back(res[1]); retu.push_back(res[0]); } else { retu.push_back(res[3]); retu.push_back(res[0]); } return retu; }};
0 0
- 寻找错误结点练习
- 寻找错误结点
- 折纸、寻找错误结点
- 【刷题之路】寻找错误结点
- 二叉树8:寻找错误结点练习题
- 寻找错误结点 中序遍历
- 寻找单链表中间结点
- 牛客网 | 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 数据结构与算法分析笔记与总结(java实现)--二叉树8:寻找错误结点练习题
- 二叉树寻找父结点
- 寻找最近共同祖先结点
- 寻找单链表的中间结点
- 寻找二个链表的公共结点
- 结点 链表 练习
- C语言程序现代设计方法---第12章:指针和数组
- 【纯新手】虚拟机安装kali教程
- JS自动识别移动端和PC端,分配二级域名
- nodejs实现表单数据的提交
- 20170226C++项目班08_修复bug/函数添加
- 寻找错误结点练习
- C++实现斐波那契数列 时间复杂度 空间复杂度
- 国码切换流程总结
- linux下线程的两种封装方式
- Android studio使用真机不打印Logcat
- shell 数组详解
- 欢迎使用CSDN-markdown编辑器
- Win7安装Cent OS 虚拟机
- Eclipse如何查看接口实现类快捷键