【LeetCode】99.Recover Binary Search Tree(Hard)解题报告
来源:互联网 发布:matlab符号矩阵行列式 编辑:程序博客网 时间:2024/05/16 11:20
【LeetCode】99.Recover Binary Search Tree(Hard)解题报告
题目地址:https://leetcode.com/problems/recover-binary-search-tree/description/
题目描述:
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?
For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2.
Your algorithm should run in O(n) time and uses constant space.
通过这道题,要学习marris traversal这种方法。
Solution:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } *//*1 5 3 4 2 6boolean flagpreNode.val > curNode.nodefirst = presecond = curMarris traversal:建桥和拆桥中序遍历应该是由小到大*/class Solution { public void recoverTree(TreeNode root) { TreeNode first = null; TreeNode second = null; boolean firstTime = true; TreeNode pre = new TreeNode(Integer.MIN_VALUE); //中序的marris traversal while(root != null){ if(root.left != null){ TreeNode temp = root.left; //目的是走到左子树最右边的node while(temp.right != null && temp.right != root){ temp = temp.right; } //第一次到达左子树最右边的那个node if(temp.right == null){ //建桥 temp.right = root; //把root向左边移动一个 root = root.left; }else{ //已经建过桥了,拆桥 temp.right = null; //visit root.val if(pre.val > root.val && firstTime){ first = pre; firstTime = false; } if(pre.val > root.val && !firstTime){ second = root; } pre = root; root = root.right; } }else{ //到了最左边的node,visit root.val if(pre.val > root.val && firstTime){ first = pre; firstTime = false; } if(pre.val > root.val && !firstTime){ second = root; } pre = root; root = root.right; } } if(first!=null && second!=null){ int tmp = first.val; first.val = second.val; second.val = tmp; } }}
Date:2017年11月23日
阅读全文
0 0
- 【LeetCode】99.Recover Binary Search Tree(Hard)解题报告
- 【LeetCode】Recover Binary Search Tree 解题报告
- [LeetCode] Recover Binary Search Tree 解题报告
- [leetcode] 99. Recover Binary Search Tree 解题报告
- [Leetcode] 99. Recover Binary Search Tree 解题报告
- [leetcode]99. Recover Binary Search Tree@Java解题报告
- LeetCode(99) Recover Binary Search Tree解题报告
- Leetcode 99. Recover Binary Search Tree (Hard) (cpp)
- Leetcode 99. Recover Binary Search Tree 恢复二叉搜索树 解题报告
- leetCode Recover Binary Search Tree解题分享
- leetcode hard模式专杀之99. Recover Binary Search Tree
- [LeetCode]Validate Binary Search Tree, 解题报告
- 【LeetCode】Validate Binary Search Tree 解题报告
- [LeetCode]Binary Search Tree Iterator,解题报告
- LeetCode-Binary Search Tree Iterator-解题报告
- [LeetCode] Validate Binary Search Tree 解题报告
- 【LeetCode】Validate Binary Search Tree 解题报告
- LeetCode 99. Recover Binary Search Tree
- IOError: No translation files found for default language zh-cn.
- 改变的相机位置和角度
- anaconda 安装opencv
- Linux磁盘空间不足
- IntelliJ IDEA使用教程(简介)
- 【LeetCode】99.Recover Binary Search Tree(Hard)解题报告
- 手把手教你如何向 Linux 内核提交代码
- 前后端分离方案
- 【视频编码】【Vue】【明星开源项目】| Chat · 预告
- oracle单表函数查询
- 记录Retrofit的post,get用法。
- 微信支付接入的那点事儿
- android全屏代码
- js写md5加密