99. 恢复二叉搜索树

恢复二叉搜索树

二叉搜索树中的两个节点被错误地交换。

请在不改变其结构的情况下,恢复这棵树。

示例 1:

输入: [1,3,null,null,2]

   1
  /
 3
  \
   2

输出: [3,1,null,null,2]

   3
  /
 1
  \
   2

思路+代码+注释:

public void recoverTree(TreeNode root) {
        /*
        思路:
        中序遍历:左根右
        中序遍历树中的节点,将节点添加到一个数组中,再将节点的值添加到另一个数组中,对节点值的数组
        从小到大进行排序,在将排序后节点的值赋给原来的节点
         */
        List<TreeNode> nodeList=new ArrayList<>();
        midSort(root,nodeList);
        int[] nodes=new int[nodeList.size()];
        for (int i = 0; i < nodeList.size(); i++) {
            nodes[i]=nodeList.get(i).val;
        }
        Arrays.sort(nodes);
        for (int i = 0; i < nodeList.size(); i++) {
            nodeList.get(i).val=nodes[i];
        }
    }

    private void midSort(TreeNode root, List<TreeNode> nodeList)
    {
        if (root==null)
        {
            return;
        }
        midSort(root.left,nodeList);
        nodeList.add(root);
        midSort(root.right,nodeList);
    }

猜你喜欢

转载自blog.csdn.net/qq_36059306/article/details/88094175
今日推荐