LeetCode——二叉树篇(九)

这篇具有很好参考价值的文章主要介绍了LeetCode——二叉树篇(九)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com

目录

669. 修剪二叉搜索树

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

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

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

LeetCode——二叉树篇(九),做题总结,leetcode,算法,binarytree,java,数据结构

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
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. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

LeetCode——二叉树篇(九),做题总结,leetcode,算法,binarytree,java,数据结构

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 *不断中间分割,然后递归处理左区间,右区间
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return traversal(nums,0,nums.length-1);
    }
    private TreeNode traversal(int[] nums, int left, int right) {
		if(left>right){
			return  null;
		}
		int mid=(left+right)/2; //取节点值下标
		TreeNode root=new TreeNode(nums[mid]);

		root.left=traversal(nums,left,mid-1);
		root.right=traversal(nums,mid+1,right);

		return root;
	}
}

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

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

LeetCode——二叉树篇(九),做题总结,leetcode,算法,binarytree,java,数据结构

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 *利用二叉搜索树特性---中序遍历结点是有序数组---从后往前累加
 * 遍历顺序为---右-中-左
 */
class Solution {
	int pre=0;
    public TreeNode convertBST(TreeNode root) {
        traversal(root);
		 return root;
    }
    private void traversal(TreeNode root) {
		if(root==null){
			return;
		}
		traversal(root.right);
		root.val+=pre;
		pre=root.val;
		traversal(root.left);
	}
}

 文章来源地址https://www.toymoban.com/news/detail-671459.html

到了这里,关于LeetCode——二叉树篇(九)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode做题笔记111. 二叉树的最小深度

    给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 本题与求二叉树最大深度的题很像,先判断根节点,再递归看左右子树最小值返回最小深度,由于根节点若在的话至少有一个节点所

    2024年02月11日
    浏览(42)
  • leetcode做题笔记124. 二叉树中的最大路径和

    二叉树中的  路径  被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中  至多出现一次  。该路径  至少包含一个  节点,且不一定经过根节点。 路径和  是路径中各节点值的总和。 给你一个二叉树的根节点  root  ,返回其  最

    2024年02月10日
    浏览(49)
  • leetcode做题笔记107. 二叉树的层序遍历 II

    给你二叉树的根节点  root  ,返回其节点值  自底向上的层序遍历  。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 本题要求二叉树的层序遍历,并且是从下至上的层序遍历,可以考虑先按照从上至下的层序遍历先将层序遍历结果放到数组中,再对每层

    2024年02月11日
    浏览(38)
  • leetcode做题笔记106. 从中序与后序遍历序列构造二叉树

    给定两个整数数组  inorder  和  postorder  ,其中  inorder  是二叉树的中序遍历,  postorder  是同一棵树的后序遍历,请你构造并返回这颗  二叉树  。 本题要利用二叉树的中序遍历和后序遍历来确定二叉树,即可不断创建新二叉树将后序遍历的右子树赋值给新二叉树,不断

    2024年02月11日
    浏览(42)
  • LeetCode算法二叉树—222. 完全二叉树的节点个数

    目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果:  给你一棵  完全二叉树  的根节点  root  ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集

    2024年02月07日
    浏览(46)
  • Leetcode面试经典150题刷题记录 —— 二叉搜索树篇

    Leetcod面试经典150题刷题记录-系列 Leetcod面试经典150题刷题记录——数组 / 字符串篇 Leetcod面试经典150题刷题记录 —— 双指针篇 Leetcod面试经典150题刷题记录 —— 矩阵篇 Leetcod面试经典150题刷题记录 —— 滑动窗口篇 Leetcod面试经典150题刷题记录 —— 哈希表篇 Leetcod面试经典

    2024年01月23日
    浏览(67)
  • 数据结构与算法——树与二叉树篇详解

    树形结构是一种非常重要的 非线性结构 ,树形结构中数据元素之间具有 一对多 的逻辑关系。 1.1.1 树的定义 树是由n(n=0)个结点所构成的有限集合 当n=0时,称为空树 当n0时,n个结点满足以下条件 有且仅有一个称为根的结点 其余结点可分为m个互不相交的有限集合,且每一个

    2024年02月06日
    浏览(50)
  • 算法训练day15Leetcode102二叉树层序遍历226翻转二叉树101对称二叉树

    https://www.bilibili.com/video/BV1ue4y1Y7Mf/?vd_source=8272bd48fee17396a4a1746c256ab0ae 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先

    2024年01月18日
    浏览(56)
  • 【算法与数据结构】226、LeetCode翻转二叉树

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :这道题的思路很简单,本质上就是遍历每一个节点,然后交换左右节点。我们可以用前中后遍历或者是层次遍历法来做,参考这两篇文章,【算法与数据结构】144、94、145LeetCode二

    2024年02月16日
    浏览(41)
  • 【算法与数据结构】654、LeetCode最大二叉树

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树这两道题有些类似,相关代码可以互相参考,本题明示了要用递归来做,那么递归三要素不可缺少: 输入参数和返

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包