博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode(99) Recover Binary Search Tree解题报告
阅读量:4134 次
发布时间:2019-05-25

本文共 2217 字,大约阅读时间需要 7 分钟。

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?

解题思路:

解法一:
空间复杂度为O(n),先序遍历BST,用线性表存储然后重新排序,再重新给BST赋值。
解法二:

转自

递归中序遍历二叉树,设置一个pre指针,记录当前节点中序遍历时的前节点,如果当前节点大于pre节点的值,说明需要调整次序。

有一个技巧是如果遍历整个序列过程中只出现了一次次序错误,说明就是这两个相邻节点需要被交换。如果出现了两次次序错误,那就需要交换这两个节点。解法跟原文有些不一样,原文的时间为6ms,下面解法为4ms。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {
List
res; int counter; public void recoverTree(TreeNode root) { res = getValue(root); counter = 0; Collections.sort(res); setValue(root); } public List
getValue(TreeNode root){ List
res = new ArrayList
(); if(root != null){ res.addAll(getValue(root.left)); res.add(root.val); res.addAll(getValue(root.right)); } return res; } public void setValue(TreeNode root){ if(root != null){ setValue(root.left); root.val = res.get(counter++); setValue(root.right); } }}
/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {
TreeNode mistake1,mistake2; TreeNode prev = null; public void recoverTree(TreeNode root) { int temp; if(root != null){ findMistake(root); temp = mistake1.val; mistake1.val = mistake2.val; mistake2.val = temp; } } public void findMistake(TreeNode root){ if(root != null){ findMistake(root.left); if(prev != null && prev.val > root.val){ if(mistake1 == null){ mistake1 = prev; mistake2 = root; } else mistake2 = root; } prev = root; findMistake(root.right); } }}

转载地址:http://ttivi.baihongyu.com/

你可能感兴趣的文章
第二十七章:不改变正负数之间相对顺序重新排列数组
查看>>
第二十八章:最大连续乘积子串
查看>>
第二十八章续:任意(N-1)个数的组合中乘积最大的一组
查看>>
第三十三章:木块砌墙
查看>>
第三十三章续:用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案
查看>>
第三十四章:格子取数问题
查看>>
第三十五章:完美洗牌算法
查看>>
第三十九章:最近公共祖先LCA问题
查看>>
HDU2586 How far away ?
查看>>
写在路上
查看>>
第一章 趣味数独
查看>>
程序员之路
查看>>
第三十九章续:区间最值RMQ问题
查看>>
第二章 趣味迷宫
查看>>
第三章 坦克大战
查看>>
HDU1085 Holding Bin-Laden Captive!
查看>>
HDU1133 Buy the Ticket
查看>>
HDU1715 大菲波数
查看>>
HDU2048 神、上帝以及老天爷
查看>>
HDU2049 不容易系列之(4)——考新郎
查看>>