[leetcode]99. Recover Binary Search Tree@Java解题报告
2017-08-05 11:02
309 查看
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?
package go.jacob.day805;
public class Demo2 {
//firstElem第一个被交换的element,secondElem被交换的element
TreeNode firstElem = null, secondElem = null;
//把上一个节点初始化为最小值
TreeNode preElem = new TreeNode(Integer.MIN_VALUE);
public void recoverTree(TreeNode root) {
// 中序遍历
inOrderTraverse(root);
int tmp = firstElem.val;
firstElem.val = secondElem.val;
secondElem.val = tmp;
}
private void inOrderTraverse(TreeNode root) {
if (root == null)
return;
inOrderTraverse(root.left);
// 1234567到1264537
if (firstElem == null && preElem.val >= root.val) {
firstElem = preElem;
}
if (firstElem != null && preElem.val >= root.val) {
secondElem = root;
}
preElem = root;
inOrderTraverse(root.right);
}
private class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}
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?
package go.jacob.day805;
public class Demo2 {
//firstElem第一个被交换的element,secondElem被交换的element
TreeNode firstElem = null, secondElem = null;
//把上一个节点初始化为最小值
TreeNode preElem = new TreeNode(Integer.MIN_VALUE);
public void recoverTree(TreeNode root) {
// 中序遍历
inOrderTraverse(root);
int tmp = firstElem.val;
firstElem.val = secondElem.val;
secondElem.val = tmp;
}
private void inOrderTraverse(TreeNode root) {
if (root == null)
return;
inOrderTraverse(root.left);
// 1234567到1264537
if (firstElem == null && preElem.val >= root.val) {
firstElem = preElem;
}
if (firstElem != null && preElem.val >= root.val) {
secondElem = root;
}
preElem = root;
inOrderTraverse(root.right);
}
private class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}
相关文章推荐
- [leetcode]125. Valid Palindrome@Java解题报告
- [leetcode]98. Validate Binary Search Tree@Java解题报告
- [leetcode]126. Word LadderII@Java解题报告
- LeetCode Plus One Java版解题报告
- 【LeetCode】Group Anagrams 解题报告(Python & Java)
- [leetcode]19. Remove Nth Node From End of List@Java解题报告
- [leetcode]144. Binary Tree Preorder Traversal@Java解题报告
- [leetcode]60. Permutation Sequence@Java解题报告
- 【LeetCode】Validate Binary Search Tree 解题报告(Java & Python)
- Maximum Depth of Binary Tree | leetcode 104 【Java解题报告】
- 【LeetCode】Merge Two Sorted Lists 解题报告(Java & Python)
- [leetcode]76. Minimum Window Substring@Java解题报告
- [leetcode]145. Binary Tree Postorder Traversal@Java解题报告
- [leetcode]114. Flatten Binary Tree to Linked List@Java解题报告
- [leetcode]133. Clone Graph@Java解题报告
- 【LeetCode】Linked List Cycle 解题报告(Java & Python)
- [leetcode]136. Single Number@Java解题报告
- [leetcode]61. Rotate List@Java解题报告
- [leetcode]107. Binary Tree Level Order Traversal II@Java解题报告
- Leetcode 349. Intersection of Two Arrays 解题报告 Python Java