1. 程式人生 > >[LeetCode] 99. Recover Binary Search Tree Java

[LeetCode] 99. Recover Binary Search Tree Java

integer 一個點 binary efi spa with init sta tno

題目:

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?

題意及分析:一棵二叉搜索樹的 兩個點順序錯了,恢復它。找出順序交換的兩個點,交換點有兩種情況:(1)一種是相鄰兩個點交換,這樣只出現一次逆序(2)一種是不相鄰兩個點交換,出現兩個逆序,交換的兩個點分別為第一次逆序的第一個點和第二次逆序的第二個點,找到這兩個點,然後交換。

代碼:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    TreeNode firstNode = null;
    TreeNode secondNode = null;

    TreeNode prevElement = new TreeNode(Integer.MIN_VALUE);

    
public void recoverTree(TreeNode root) { //一棵二叉搜索樹的 兩個點順序錯了,恢復它 //找出順序交換的兩個點,交換點有兩種情況:(1)一種是相鄰兩個點交換,這樣只出現一次逆序(2)一種是不相鄰兩個點交換,出現兩個逆序,交換的兩個點分別為第一次逆序的第一個點和第二次逆序的第二個點,找到這兩個點,然後交換 traverse(root); int temp = firstNode.val; firstNode.val = secondNode.val; secondNode.val
= temp; } public void traverse(TreeNode node){ if(node == null) return; traverse(node.left); if(firstNode == null && prevElement.val >= node.val){ //逆序 firstNode = prevElement; } if(firstNode!=null && prevElement.val>=node.val) secondNode = node; prevElement = node; traverse(node.right); } }

[LeetCode] 99. Recover Binary Search Tree Java