Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【一天一大 lee】二叉搜索树中的插入操作 (难度:中等) - Day20200930

【一天一大 lee】二叉搜索树中的插入操作 (难度:中等) - Day20200930

作者头像
前端小书童
发布于 2020-10-26 03:17:53
发布于 2020-10-26 03:17:53
40600
代码可运行
举报
文章被收录于专栏:前端小书童前端小书童
运行总次数:0
代码可运行
题目:

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。你可以返回任意有效的结果。

例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
给定二叉搜索树:

        4
       / \
      2   7
     / \
    1   3

和 插入的值: 5

你可以返回这个二叉搜索树:

或者这个树也是有效的:

提示:

  • 给定的树上的节点数介于 0 和
10^8

之间

  • 每个节点都有一个唯一整数值,取值范围从 0 到
10^8
-10^8

<= val <=

10^8
  • 新值和原始二叉搜索树中的任意节点值都不同

抛砖引玉

抛砖引玉

思路

二叉搜索树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

即:左子树 < 根节点 < 右子树

那么遍历二叉树:

  • 如果 node 大于 val 则优先遍历右子树
  • 如果 node 小于 val 则优先遍历左子树

不打断原有子树,追加到叶子节点上。

递归

指针从根节点开始递归遍历,每轮与根节点值比较,比较后指针更新到子树根节点,直到遇到空根节点即:

使用 val 对节点大小划分划分到与其差值最小的节点,生成节点值为 val 的子树追加到原树上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var insertIntoBST = function(root, val) {
  if (root === null) return new TreeNode(val)
  if (root.val > val) {
    //比该节点大查找左节点
    root.left = insertIntoBST(root.left, val)
  } else {
    //比该节点小查找右节点
    root.right = insertIntoBST(root.right, val)
  }
  return root
}

模拟

声明指针 node,模拟递归时指针变化:

从根节点开始:小于 val 指向左子树,不然指向右子树,直到遇到叶子节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var postorderTraversal = function(root) {
  if (root === null) return new TreeNode(val)
  let node = root
  while (node !== null) {
    if (val < node.val) {
      if (node.left === null) {
        node.left = new TreeNode(val)
        break
      } else {
        node = node.left
      }
    } else {
      if (node.right === null) {
        node.right = new TreeNode(val)
        break
      } else {
        node = node.right
      }
    }
  }
  return root
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一天一大 lee(恢复二叉搜索树)难度:困难-Day20200808
题目: 二叉搜索树中的两个节点被错误地交换。 请在不改变其结构的情况下,恢复这棵树。 示例 示例 1 输入: [1,3,null,null,2] 1 / 3 \ 2 输出:
前端小书童
2020/09/24
4700
一天一大 lee(恢复二叉搜索树)难度:困难-Day20200808
LeetCode 701: 二叉搜索树中的插入操作 Insert into a Binary Search Tree
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。保证原始二叉搜索树中不存在新值。
爱写bug
2020/03/25
9630
【一天一大 lee】二叉搜索树的最小绝对差 (难度:简单) - Day20201012
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
前端小书童
2020/10/14
2760
二叉搜索树中的插入操作
题目链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
代码随想录
2021/09/08
4320
二叉搜索树中的插入操作
【一天一大 lee】 把二叉搜索树转换为累加树 (难度:简单)-Day20200921
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
前端小书童
2020/09/24
3300
【一天一大 lee】 把二叉搜索树转换为累加树 (难度:简单)-Day20200921
数据结构与算法(3)——树(二叉、二叉搜索树)树LeetCode相关题目整理
树是一种类似于链表的数据结构,不过链表的结点是以线性方式简单地指向其后继结点,而树的一个结点可以指向许多个结点;数是一种典型的非线性结构;树结构是以表达具有层次特性的图结构的一种方法;
我没有三颗心脏
2018/07/24
1.1K0
数据结构与算法(3)——树(二叉、二叉搜索树)树LeetCode相关题目整理
TypeScript算法题实战——二叉搜索树篇
推荐文章:《Spring AI中的卷积神经网络(CNN):深度解析与Java实现》
中杯可乐多加冰
2024/12/08
1230
【算法题解】 Day9 二叉搜索树
我们可以从题目中知道何为有效的二叉搜索树,父节点的值要大于左孩子且小于右孩子,同时所有左子树和右子树自身必须也是二叉搜索树。
sidiot
2023/08/31
1540
【算法题解】 Day9 二叉搜索树
【一天一大 lee】二叉搜索树的最近公共祖先 (难度:简单) - Day2020092
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
前端小书童
2020/09/30
3300
【一天一大 lee】二叉搜索树的最近公共祖先 (难度:简单) - Day2020092
[第33期] 树,二叉树, 二叉搜索树
比如想想访问中间某个结点的时候,或者倒数第几个结点 就只能从头往后一个一个查, 效率不高。
皮小蛋
2020/02/29
5340
【一天一大 lee】 二叉搜索树中的众数 (难度:简单)-Day20200924
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
前端小书童
2020/09/29
3170
二叉搜索树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
木子星兮
2020/07/17
4410
98 验证二叉搜索树
和上题一样可以很好的想到递归的思路,左边都是越来越小,右边是越来越大。这个地方容易产生一种错觉。
木瓜煲鸡脚
2021/01/18
4850
98 验证二叉搜索树
【数据结构与算法】二叉搜索树
如果希望让除 int 外更多的类型能够作为 key,一种方式是 key 必须实现 Comparable 接口。
程序员波特
2024/09/29
2040
【数据结构与算法】二叉搜索树
一天一大 lee(二叉树的中序遍历)难度:中等-Day20200914
递归方法采用了深度优先遍历的形式,一般可以采用深度优先遍历就可以采用广度优先遍历。
前端小书童
2020/09/24
3160
一天一大 lee(二叉树的中序遍历)难度:中等-Day20200914
判断一棵满二叉树是否为二叉搜索树
给定一棵满二叉树,判定该树是否为二叉搜索树,是的话打印 True,不是的话打印 False。
echobingo
2019/11/02
1.2K0
4个例子,吃透 JavaScript 实现的二叉搜索树 BST
对于每一个节点root,代码值检查了它的左右孩子节点是否符合左小右大的原则;但是根据 BST 的定义,root的整个左子树都要小于root.val,整个右子树都要大于root.val。
程序员小助手
2022/12/20
3570
C#二叉搜索树算法
二叉搜索树(Binary Search Tree,简称BST)是一种节点有序排列的二叉树数据结构。它具有以下性质:
追逐时光者
2024/08/22
1040
C#二叉搜索树算法
【leetcode刷题】T154-二叉搜索树中的插入操作
https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
木又AI帮
2019/09/03
4350
二叉搜索树登场!
到了二叉搜索树,开始要换一个思路了,如果没有利用好二叉搜索树的特性,就容易把简单题做成了难题了。
代码随想录
2021/09/08
3170
二叉搜索树登场!
推荐阅读
相关推荐
一天一大 lee(恢复二叉搜索树)难度:困难-Day20200808
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验