二叉搜索树有且只有一对节点被调换了,复原它
Input: [1,3,null,null,2] 1 / 3 \ 2 Output: [3,1,null,null,2] 3 / 1 \ 2最简单的方法:
中序遍历二叉树,把所有value存下来,然后排序,再依次赋值回去。
// Runtime: 4 ms, faster than 20.10% of Java online submissions for Recover Binary Search Tree. //Memory Usage: 39.2 MB, less than 14.45% of Java online submissions for Recover Binary Search Tree. public void recoverTree(TreeNode root) { List<Integer> list = new ArrayList<>(); List<TreeNode> nodes = new ArrayList<>(); helper(root, nodes, list); list.sort(Integer::compareTo); for (int i = 0; i < nodes.size(); i++) nodes.get(i).val = list.get(i); } private void helper(TreeNode root, List<TreeNode> nodes, List<Integer> list) { if (root == null) return; helper(root.left, nodes, list); nodes.add(root); list.add(root.val); helper(root.right, nodes, list); }