【二叉树】|代码随想录算法训练营第18天|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、【总结】

刷题神器

代码随想录

往期回顾

>【二叉树】|代码随想录算法训练营第17天|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

题目

669. 修剪二叉搜索树

题目:题目链接
文章:文章讲解
视频:视频讲解

  • 学后思路

    修剪二叉树和删除二叉树有一些相似但是有特殊处理的地方,需要注意处理节点和左右子树

解法1:

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null) return null;
        // 注意其右子树有可能有符合区间的值
        if(root.val < low){
            TreeNode right = trimBST(root.right, low, high);
            return right;
        }
        // 注意其左子树有可能有符合区间的值
        if(root.val > high){
            TreeNode left = trimBST(root.left,low, high);
            return left;
        }

        root.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);

        return root;
    }
}
  • 题目总结
    • 处理小于或大于区间的时候要考虑其左右子树的合理性,二叉搜索树的左右子树有可能有符合条件的值

108.将有序数组转换为二叉搜索树

题目:题目链接
文章:文章讲解
视频:视频讲解

  • 学后思路
    将有序数组构建二叉搜索树,要求是平衡二叉树,平衡二叉树,取中间节点,保证左右子树的高度

解法一:

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums.length == 1)
            return new TreeNode(nums[0]);

        int mid = nums.length / 2;
        TreeNode root = new TreeNode(nums[mid]);

        if (mid > 0) {
            root.left = sortedArrayToBST(Arrays.copyOfRange(nums, 0, mid));
        }

        if (mid < nums.length - 1) {
            root.right = sortedArrayToBST(Arrays.copyOfRange(nums, mid + 1, nums.length));
        }

        return root;

    }
}
  • 题目总结
    • 注意结束条件的判断,注意区间取值的判断
    • 注意数组如何copy Arrays.copyOfRange

538.把二叉搜索树转换为累加树

题目:题目链接
文章:文章讲解
视频:视频讲解

  • 学后思路
    有序数组,从后往前遍历,搜索树,递增,左中右,如果想要递加,反过来,右中左,

解法一:

class Solution {
    int pre = 0;
    public TreeNode convertBST(TreeNode root) {
        if(root == null) return root;
        convertBST(root.right);
        root.val = root.val + pre;
        pre = root.val;
        convertBST(root.left);
        return root;
    }
}
  • 题目总结
    • 注意pre指针的作用
    • 注意convert的返回值的意义

二叉树总结

二叉树的理论基础

二叉树的种类、存储方式、遍历方式、定义方式

二叉树的遍历方式

深度优先遍历,前中后序

广度优先遍历,通过队列模拟

求二叉树的属性
二叉树的修改与构造
求二叉搜索树的属性
二叉树的公共祖先
二叉树的修改与构造
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值