当前位置: 首页 > news >正文

代码随想录 701.二叉搜索树中的插入操作

思路:二叉搜索树的插入操作无需重构二叉树,只要遍历二叉搜索树,找到空节点插入元素就可以了(创建子树)。

方法一:递归。

1.确定递归函数的参数和返回值:

(1)参数:根节点和要插入的元素。

(2)返回值:返回值类型为TreeNode,返回值用于实现新加入的节点与其父节点的赋值操作。

public TreeNode insertIntoBST(TreeNode root, int val)

2.确定终止条件:当找到遍历的节点为null的时候,就找到了要插入节点的位置,把插入的节点返回给上一层(完成父子节点的赋值操作)。

            if (root == null) // 如果当前节点为空,也就意味着val找到了合适的位置,此时创建节点直接返回。return new TreeNode(val);

3.确定单层递归的逻辑:因为本题的树是二叉搜索树,所以可利用其有序性质,而无需遍历整棵树,根据插入元素的数值大小与根节点数值大小的关系,决定递归方向(下一层已经将加入节点返回,这一层用root.left或root.right将其接住)。

        if (root.val < val){root.right = insertIntoBST(root.right, val); // 递归创建右子树}else if (root.val > val){root.left = insertIntoBST(root.left, val); // 递归创建左子树}return root;

附代码:

    class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) // 如果当前节点为空,也就意味着val找到了合适的位置,此时创建节点直接返回。return new TreeNode(val);if (root.val < val){root.right = insertIntoBST(root.right, val); // 递归创建右子树}else if (root.val > val){root.left = insertIntoBST(root.left, val); // 递归创建左子树}return root;}
}

方法二:迭代。

思路:在迭代法遍历的过程中,需要记录当前遍历节点的父节点,这样才能做插入节点的操作。

    class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) return new TreeNode(val);TreeNode newRoot = root;//需要记录上一个节点,否则无法赋值新节点TreeNode pre = root;while (root != null) {pre = root;if (root.val > val) {root = root.left;} else if (root.val < val) {root = root.right;} }//用父节点进行赋值if (pre.val > val) {pre.left = new TreeNode(val);} else {pre.right = new TreeNode(val);}return newRoot;}
}

http://www.dtcms.com/a/536641.html

相关文章:

  • 自定义监控大屏项目实现方案
  • h5游戏免费下载:HTML5拉杆子过关小游戏
  • 电商系统经典陷阱
  • 5.5类的主方法
  • 带后台的php网站模板营销推广是一种什么的促销方式
  • 神经网络进化史:从理论到变革
  • 系统集成项目管理工程师案例分析:整合管理高频考点精要
  • 快速达建网站怎么给餐饮店做网站
  • 国产化Excel开发组件Spire.XLS教程:使用Python将CSV转换为XML(处理现实数据问题)
  • 常用软件下载地址
  • 开网站做外贸东莞市阳光网
  • 面向光学引导热红外无人机图像超分辨率的引导解耦网络
  • Java医院管理系统HIS源码带小程序和安装教程
  • 自监督 YOLO:利用对比学习实现标签高效的目标检测
  • 快速排序(Quick Sort)详解与图解
  • NB-IOT(4) :从媒体接入到数据传输的全链路解析
  • 如何使用Advanced Installer打包C#程序生成安装程序
  • 做网站的开题报告怎么写云服务器
  • 产品公司网站建设方案模板美味的树莓派wordpress
  • Word VBA中的Collapse方法详解
  • 介绍一下Spring Cloud LoadBalancer
  • 写作网站排名南京专业网站优化公司
  • 今日印度股市最新行情与实时走势分析(截至2025年10月27日)
  • KingbaseES数据库操作指南(2):SQL语法从入门到精通
  • 介绍一个不错的新闻源汇总开源Github项目 BestBlogs
  • 第3章 运行时数据区概述及线程
  • 深入理解C语言函数栈帧:程序运行的底层密码
  • 谷歌网站怎么做外链站长工具端口查询
  • FPGA DDR3实战(十):基于DDR3的高速故障录播系统(二)—— 数据流转换与时钟域设计
  • 运维蓝图 用多工具组合把 iOS 混淆变成可复用的工程能力(iOS 混淆 IPA 加固 )