java二叉树中数据插入算法的示例分析
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:leetcode 第701题二叉树插入数据题目:给定二叉搜索树(BST
千家信息网最后更新 2025年01月20日java二叉树中数据插入算法的示例分析
这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
例题:
leetcode 第701题
二叉树插入数据
题目:
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
对于二叉树的遍历有三种方式
前序遍历:根左右 的顺序
中序遍历:左根右 的顺序
后序遍历:左右根 的顺序
二叉树插入数据的原理/思路是什么?
二叉树的左侧的数会比右侧的数小,所以我们用需要插入的数据和根节点的值比较大小,如果插入的数据大于根节点,那么根节点就转移到右侧的节点上,此时重复上面的操作即可完成插入。
我们读一下TreeNode代码段:
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; }}
很显然,二叉树之间是通过left
,right
来链接的,和ListNode的next非常的相似,只不过二叉树是双向链接,而链表则是单向。所以我们就需要获取到父节点,用父节点的left
或right
来链接插入的数。
那么我们如何获取到能正确插入该数据的节点呢?
1.我们可以通过循环移动节点的方式,来获取最后一个不为空的节点
//定义一个父级二叉树 用来记录上个操作的节点 TreeNode parent =root,cur=root; while(cur!=null){ //如果p部位空的话,就和val比较来进行节点的移动 parent = cur; //记录上一个节点,用于最后的链接 cur = cur.val2.然后用最后一个不为空的节点的值与插入值进行比较插入即可,小的则插入左侧,大的则插入右侧。
代码实现
if(parent.val>val){ //如果父级的val是大于输入的val,那么插在左边 parent.left = new TreeNode(val); }else{ //否则插在右边 parent.right = new TreeNode(val); }整体代码
if (root == null){ return new TreeNode(val); } //定义一个父级二叉树 用来记录上个操作的节点 TreeNode parent =root,cur=root; while(cur!=null){ //如果p部位空的话,就和val比较来进行节点的移动 parent = cur; //记录上一个节点,用于最后的链接 cur = cur.valval){ //如果父级的val是大于输入的val,那么插在左边 parent.left = new TreeNode(val); }else{ //否则插在右边 parent.right = new TreeNode(val); } return root; 当然,因为节点的移动一直重复一个操作,我们可以用更简单的递归实现
public TreeNode insertIntoBST(TreeNode root, int val) { if (root == null){ return new TreeNode(val); } if(root.val全部代码
package JAVA算法.LeetCode;public class t701 { /** 701. 二叉搜索树中的插入操作 二叉树分为前序插入,中序插入,后序插入 解决思路 1.利用迭代思想实现二叉树的插入 */}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; }}/** * 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 { /* 二叉树插入原理: 1.前序插入(根左右) 如果插入的树大于根,数则往右侧移动,与右侧分支的根进行比较,然后重复前面的操作 */ public TreeNode insertIntoBST(TreeNode root, int val) { //当传入的根节点为空,则将传入的值设置为节点 if (root == null){ //如果tree为空的,那么就创建一个新的二叉并赋值 return new TreeNode(val); } if (root.valval?p.left:p.right; }else{ //当p为null了,则已经找到位置了,现在则需要将值进行插入 if (parent.val>val){ parent.left = new TreeNode(val); }else{ parent.right = new TreeNode(val); } break; } } return root; } //解法三:循环遍历, /** * * @param root * @param val * @return * * 解法思路:我们先通过一个循环找到能插入位置的父节点, * 然后我们就对值与父节点的值进行比较,如果该值小于父节点的话我们就插入在父节点的左侧 */ public TreeNode insertBST3(TreeNode root,int val){ if (root == null){ return new TreeNode(val); } //定义一个父级二叉树 用来记录上个操作的节点 TreeNode parent =root,p=root; while(p!=null){ //如果p部位空的话,就和val比较来进行节点的移动 parent = p; //记录上一个节点,用于最后的链接 p = p.val val){ //如果父级的val是大于输入的val,那么插在左边 parent.left = new TreeNode(val); }else{ //否则插在右边 parent.right = new TreeNode(val); } return root; }} 以上是"java二叉树中数据插入算法的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
节点
数据
移动
链接
右侧
搜索
代码
输入
算法
右边
思路
部位
顺序
循环
示例
分析
位置
内容
原理
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
根端服务器
万方数据库期刊查询叙事医学
东莞网络安全和信息化委员会
技校生找数据库工程师
游戏服务器安装后没有连接
高博领域互联网科技有限公司
域名服务器打不开网站怎么办
开始文件管理系统服务器版
游戏软件开发吧
高校网络安全管理条例
软件开发费用决算表
天池网络技术有限公司
盘古网络技术公司董事长
石景山区软件开发诚信服务
怎样查找游戏光遇所在的服务器
校园网络安全管理教育
网络技术员岗位考试题
天津世纪云网络技术有限公司
英雄联盟服务器一直测速中
国防网络安全龙头
网络技术在淘宝上的应用
肇源网络安全宣传周
网络技术有限公司名称推荐
数据库服务器重启以后连不上卡住
网络安全专业人才从业资格证
无锡挑选软件开发项目信息
数据库中完成查询操作的语言是
网络安全法 等保2.0
湖北电商软件开发大概要多少钱
上海个性化网络技术哪家强