千家信息网

java二叉树中数据插入算法的示例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:leetcode 第701题二叉树插入数据题目:给定二叉搜索树(BST
千家信息网最后更新 2026年11月02日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.val

2.然后用最后一个不为空的节点的值与插入值进行比较插入即可,小的则插入左侧,大的则插入右侧。

代码实现

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.valval){            //如果父级的val是大于输入的val,那么插在左边            parent.left = new TreeNode(val);        }else{            //否则插在右边            parent.right = new TreeNode(val);        }        return root;    }}

以上是"java二叉树中数据插入算法的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

节点 数据 移动 链接 右侧 搜索 代码 输入 算法 右边 思路 部位 顺序 循环 示例 分析 位置 内容 原理 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技行业发展 深圳科技互联网 百单互联网科技有限公司 中国互联网金融科技基金 衡水科技产业互联网平台 海南科技产业互联网平台 济南和联互联网科技有限公司 字节跳动和互联网科技 成都铂石互联网科技做什么的 世界互联网科技公司市值排名 杭州壁岐互联网科技有限公司 开一家科技互联网公司需要多少钱 国大互联网教育科技有限公司工作 内蒙古九一互联网科技 互联网科技的全部知识 互联网科技数字货币 吉林省码上互联网科技电话 互联网时代高科技布局 数字科技和互联网金融哪个好 互联网科技大佬云集 咖啡 广州大一互联网络科技有限公司 奇酷互联网科技 致聘互联网科技 一五八零互联网科技 互联网巨头投资的硬核科技 成都玖崟互联网科技有限公司乐商圈怎么样 中国的互联网科技企业的崛起 艺电能源互联网科技有限公司招聘 科技互联网公司两年变化
0