Leetcode:Recover Binary Search Tree

url

https://leetcode.com/problems/recover-binary-search-tree/description/

题目大意:

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?

解题思路:

二叉树的中序遍历,如果正常的BST,中序遍历是有序的,所以有我们使用中序遍历,当遇到第一个前一个值大于后一个值的时候,则我们找到了第一个位置,当我们遇到最后一个前一个值大于后一个值的时候,这个较小值的节点则是第二个位置。最后将这两个位置的值互换即可。

代码

递归解法

private void inOrder(TreeNode node){
        if(node == null ) return;
        inOrder(node.left);
        if(prev != null && prev.val >= node.val){
            if(first==null){
                first = prev;
            }
            second = node;
        }
        prev = node;
        inOrder(node.right);
    }

迭代解法

private void inOrderIterator(TreeNode node){
        TreeNode cur = node;
        TreeNode prev = null;
        Stack<TreeNode> stack = new Stack<>();
        while(cur!=null || !stack.isEmpty()){
            if(cur!=null){
                stack.push(cur);
                cur = cur.left;
            }else{
                TreeNode top = stack.pop();
                if(prev!=null && prev.val>=top.val){
                    if(first==null) first = prev;
                    second = top;
                }
                prev = top;
                cur = top.right;
            }
        }
    }

Leetcode 提交代码接口实现

private TreeNode prev = null;
    private TreeNode first = null;
    private TreeNode second = null;
    public void recoverTree(TreeNode root) {

        inOrderIterator(root);
        int temp = first.val;
        first.val = second.val;
        second.val = temp;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值