通关剑指 Offer——剑指 Offer II 052. 展平二叉搜索树

1.题目描述

剑指 Offer II 052. 展平二叉搜索树

给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。

示例 1:

输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]

示例 2:

输入:root = [5,1,7]
输出:[1,null,5,null,7]

2.解题思路与代码

2.1 解题思路

简单题目就用最简单的方法解决,题目要展平二叉搜索树,并按照递增的顺序排列,那么我们可以根据二叉搜索树的中序遍历特性:中序遍历二叉搜索树得到的遍历结果是按照递增顺序排列的。那么根据这个特性我们直接中序遍历该二叉搜索树,并存入一个列表中,然后再遍历列表重新组装各个节点即可。重新组装的时候需要将每个节点的左树置为 null。

2.2 代码

class Solution {
    public TreeNode increasingBST(TreeNode root) {
        if (root == null) {
            return null;
        }
        List<TreeNode> list = new ArrayList<>();
        process(root,list);
        root = list.get(0);
        TreeNode curr = root;
        for (int i = 1; i < list.size(); i++) {
            curr.left = null;
            curr.right = list.get(i);
            curr = curr.right;
        }
        curr.left = null;
        return root;
    }

    public void process(TreeNode root, List<TreeNode> list ) {
        if (root == null) {
            return;
        }
        process(root.left, list);
        list.add(root);
        process(root.right, list);

    }
}

2.3 测试结果

通过测试
通关剑指 Offer——剑指 Offer II 052. 展平二叉搜索树_第1张图片

3.总结

  • 根据二叉搜索树的中序遍历特性解答
  • 重组二叉树时需要将左子树置为null

你可能感兴趣的:(#,代码练习,算法,leetcode,数据结构,java)