Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

解题思路:

先中序遍历找到mistake,然后替换即可,JAVA实现如下:

public void recoverTree(TreeNode root) {
List<Integer> list = inorderTraversal(root);
int left = 0, right = 0;
boolean first = true;
for (int i = 0; i < list.size(); i++) {
if (first && i != list.size() - 1 && list.get(i) >= list.get(i + 1)) {
left = list.get(i);
first = false;
}
if (!first && i != 0 && list.get(i) < list.get(i - 1)) {
right = list.get(i);
}
}
transformTreeNode(root, right, Integer.MAX_VALUE);
transformTreeNode(root, left, right);
transformTreeNode(root, right, left); } public static void transformTreeNode(TreeNode root, int souce, int target) {
if (root == null)
return;
if (root.val == souce) {
root.val = target;
return;
}
transformTreeNode(root.left, souce, target);
transformTreeNode(root.right, souce, target);
} static public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root == null)
return list;
if (root.left != null)
list.addAll(inorderTraversal(root.left));
list.add(root.val);
if (root.right != null)
list.addAll(inorderTraversal(root.right));
return list;
}

最新文章

  1. MYSQL中存储过程的创建,调用及语法
  2. 数据库mark
  3. 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
  4. [BZOJ1016][JSOI2008]最小生成树计数(结论题)
  5. ASP.NET MVC3 局部页面@RENDERBODY @RENDERPAGE@RENDERSECTION使用方法详细说明
  6. 关于jsb中js与c++的相互调用
  7. 如何获得JVM执行过程中调用的方法名
  8. 一个C++的多态和虚函数实例
  9. Spring.Net-DI依赖注入和Ioc控制反转
  10. 每天一个linux命令(41)--ping命令
  11. Ubuntu下利用Apache转发模块实现反向代理
  12. 使用turtle画故宫(伍奇,侯俊豪小组)
  13. mybatis 中javaType和OfType 的区别
  14. JaveWeb 公司项目(5)----- Java获取当前时间的年月日以及同Thrift格式的转化
  15. Linux用户创建/磁盘挂载相关命令
  16. 后期生成事件命令copy /y
  17. IDEA无法启动debugger,报错Address localhost:1099 is already in use
  18. Android之View / SurfaceView / GLSurfaceView
  19. C# 使用KingAOP面向切面编程
  20. SpringBoot学习(三)IDEA

热门文章

  1. TypeError at /post/ render_to_response() got an unexpected keyword argument &#39;context_instance&#39;
  2. PE经典DIY案例1:全解开方案让量产PE也能
  3. AOP技术应用于安全防御与漏洞修复
  4. (转)python装饰器二
  5. Linux系统救援模式应用:恢复误删的系统文件
  6. vue2.0 仿手机新闻站(一)项目开发流程
  7. vue prop单向数据流
  8. Struts2学习四----------动态方法调用
  9. 《UNIX环境高级编程》读书笔记 —— 文件 I/O
  10. Top 10 Open Source Bug Tracking System系统