99. Recover Binary Search Tree
Posted ruruozhenhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了99. Recover Binary Search Tree相关的知识,希望对你有一定的参考价值。
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Example 1:
Input: [1,3,null,null,2] 1 / 3 2 Output: [3,1,null,null,2] 3 / 1 2
Example 2:
Input: [3,1,4,null,null,2] 3 / 1 4 / 2 Output: [2,1,4,null,null,3] 2 / 1 4 / 3
Follow up:
- A solution using O(n) space is pretty straight forward.
- Could you devise a constant space solution?
Approach #1: C++.[Recursive]
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void recoverTree(TreeNode* root) { if (root == NULL) return; helper(root); int temp = first->val; first->val = second->val; second->val = temp; } private: TreeNode* first = NULL; TreeNode* second = NULL; TreeNode* prev = NULL; void helper(TreeNode* root) { if (root == NULL) return; helper(root->left); if (prev != NULL && prev->val > root->val) { if (first == NULL) first = prev; second = root; } prev = root; helper(root->right); } };
Approach #2: Java.[Iterator]
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public void recoverTree(TreeNode root) { if (root == null) return; TreeNode first = null; TreeNode second = null; TreeNode prev = null; Stack<TreeNode> stack = new Stack<>(); TreeNode curr = root; while (!stack.isEmpty() || curr != null) { if (curr != null) { stack.push(curr); curr = curr.left; } else { curr = stack.pop(); if (prev != null && prev.val > curr.val) { if (first == null) first = prev; second = curr; } prev = curr; curr = curr.right; } } int temp = first.val; first.val = second.val; second.val = temp; } }
Approach #3: Python. [Recursive]
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def recoverTree(self, root): """ :type root: TreeNode :rtype: void Do not return anything, modify root in-place instead. """ self.first = None self.second = None self.prev = None if root == None: return; self.helper(root); temp = self.first.val self.first.val = self.second.val self.second.val = temp def helper(self, root): if root == None: return; self.helper(root.left) if self.prev != None and self.prev.val > root.val: if self.first == None: self.first = self.prev self.second = root self.prev = root self.helper(root.right)
以上是关于99. Recover Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章
99. Recover Binary Search Tree
LeetCode99 Recover Binary Search Tree
99. Recover Binary Search Tree
Leetcode 99. Recover Binary Search Tree