99-恢复二叉搜索树

二叉搜索树的概念:
根节点要小于右子树的节点,必须要大于左子树的节点。

在这里插入图片描述


根据二分搜索树的特点,其中序遍历是有序的。

在这里插入图片描述


所以先对其进行排序

//中序遍历二叉树
    public void dfs(TreeNode node, List<TreeNode> list){
        if (node.left == null){
            return;
        }
        dfs(node.left,list);
        list.add(node);
        dfs(node.right,list);
    }

然后判断可能错误的节点

public void recoverTree(TreeNode root) {
        List<TreeNode> list = new ArrayList<>();
        dfs(root,list);
        TreeNode x = null;
        TreeNode y = null;
        //打印遍历的结果,遍历可能出现出错的节点 x 和 y
        for (int i = 0; i < list.size() - 1; i++) {
            if (list.get(i).val > list.get(i + 1).val){
                y = list.get(i + 1);
                if (x == null){
                    x = list.get(i);
                }
            }
        }
        //当 x 和 y 不为空是交换节点两个的值,恢复二叉树
        if (x != null && y != null){
            int temp = x.val;
            x.val = y.val;
            y.val = temp;
        }
    }

    //中序遍历二叉树
    public void dfs(TreeNode node, List<TreeNode> list){
        if (node.left == null){
            return;
        }
        dfs(node.left,list);
        list.add(node);
        dfs(node.right,list);
    }

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...