本文主要是介绍recover-binary-search-tree,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、链接:recover-binary-search-tree
来源:牛客网
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?confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:1/ \2 3/4\5
The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
2、思路:二叉搜索树是否出现错误结点可以转换为中序遍历的前一个元素是否一直小于当前元素。总共分为下面两种情况:
- {0,1}
- {2,3,1}
如果出现前一个结点大于当前结点,将其记录下来即可。
3、代码:
public class RecoverSearchTree {public static void main(String[] args) {TreeNode root =new TreeNode(0);root.left = new TreeNode(1);RecoverSearchTree test = new RecoverSearchTree();test.recoverTree(root);}private TreeNode firstErrorNode = null;private TreeNode secondErrorNode = null;private TreeNode preNode = new TreeNode(Integer.MIN_VALUE);public void recoverTree(TreeNode root) {inOrder(root);int temp = firstErrorNode.val;firstErrorNode.val = secondErrorNode.val;secondErrorNode.val = temp;}private void inOrder(TreeNode root) {if(root == null)return;inOrder(root.left);if(preNode.val >= root.val ){if(firstErrorNode == null){firstErrorNode = preNode;secondErrorNode = root;}else{secondErrorNode = root;}}//为什么这样可以记录上一个元素//因为打印的话是中序遍历的顺序,如果当前执行第一次preNode保存root//第二次执行到这句时就是当前root的上一个元素了preNode = root;inOrder(root.right);}
}
这篇关于recover-binary-search-tree的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!