返回顶部
首页 > 资讯 > 精选 >java二叉树中数据插入算法的示例分析
  • 639
分享到

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

2023-06-22 03:06:16 639人浏览 独家记忆
摘要

这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:LeetCode 第701题二叉树插入数据题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉

这篇文章主要介绍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非常的相似,只不过二叉树是双向链接,而链表则是单向。所以我们就需要获取到父节点,用父节点的leftright来链接插入的数。

那么我们如何获取到能正确插入该数据的节点呢?

我们可以通过循环移动节点的方式,来获取最后一个不为空的节点

 //定义一个父级二叉树 用来记录上个操作的节点        TreeNode parent =root,cur=root;        while(cur!=null){            //如果p部位空的话,就和val比较来进行节点的移动            parent = cur; //记录上一个节点,用于最后的链接            cur = cur.val<val?cur.right:cur.left;//节点进行移动。        }

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

代码实现

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.val<val?cur.right:cur.left;//节点进行移动。        }        if(parent.val>val){            //如果父级的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<val){              //因为父节点的值小于插入值,则要进行节点的右移              root.right = insertIntoBST(root.right,val);          }else{              root.left = insertIntoBST(root.left,val);          }        return root;    }

全部代码

package JAVA算法.LeetCode;public class t701 {    }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 insertIntoBST(TreeNode root, int val) {        //当传入的根节点为空,则将传入的值设置为节点        if (root == null){            //如果tree为空的,那么就创建一个新的二叉并赋值            return new TreeNode(val);        }        if (root.val<val){            //当当前的值是大于左侧的值,则往右侧移动            root.right=insertIntoBST(root.right,val);        }else{            //反之            root.left=insertIntoBST(root.left,val);        }        return root;    }    //解法2:循环判断    public TreeNode insertIntoBST2(TreeNode root, int val) {        if (root == null){            return new TreeNode(val);        }        TreeNode parent=root,p=root;        while(true){            if (p!=null){                parent = p; //记录上个节点                p = p.val>val?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;    }    //解法三:循环遍历,        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?p.right:p.left;//节点进行移动。        }        if(parent.val>val){            //如果父级的val是大于输入的val,那么插在左边            parent.left = new TreeNode(val);        }else{            //否则插在右边            parent.right = new TreeNode(val);        }        return root;    }}

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

--结束END--

本文标题: java二叉树中数据插入算法的示例分析

本文链接: https://lsjlt.com/news/302318.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java二叉树中数据插入算法的示例分析
    这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:leetcode 第701题二叉树插入数据题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉...
    99+
    2023-06-22
  • JavaScript数据结构与算法之二叉树插入节点、生成二叉树的示例分析
    小编给大家分享一下JavaScript数据结构与算法之二叉树插入节点、生成二叉树的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解...
    99+
    2024-04-02
  • java二叉树的数据插入算法介绍
    目录例题:对于二叉树的遍历有三种方式二叉树插入数据的原理/思路是什么?代码实现整体代码全部代码例题: leetcode 第701题 二叉树插入数据 题目: 给定二叉搜索树(BST)的...
    99+
    2024-04-02
  • Java中二叉树与N叉树的示例分析
    这篇文章主要介绍了Java中二叉树与N叉树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目一 解法class Solution {&...
    99+
    2023-06-29
  • JavaScritp中二叉树遍历算法的示例分析
    这篇文章主要为大家展示了“JavaScritp中二叉树遍历算法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScritp中二叉树遍历算法的示例...
    99+
    2024-04-02
  • Java二叉搜索树增、插、删、创的示例分析
    小编给大家分享一下Java二叉搜索树增、插、删、创的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有...
    99+
    2023-06-29
  • java二叉树面试题的示例分析
    小编给大家分享一下java二叉树面试题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二叉树的深度题目:输入一颗二叉树的根节点,求该树的的深度。输入一颗二...
    99+
    2023-06-20
  • 镜像二叉树的示例分析
    镜像二叉树的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。算法这个东西很难,纵使你了解了其中的逻辑,用代码写出来仍然不是一件容易的事,内部有太多的细节需...
    99+
    2023-06-04
  • web开发中二叉树的示例分析
    这篇文章将为大家详细讲解有关web开发中二叉树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。0.  前言到目前为止,我们已经讲述了顺序表、链表、栈、队...
    99+
    2024-04-02
  • C语言中二叉树的示例分析
    这篇文章主要为大家展示了“C语言中二叉树的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中二叉树的示例分析”这篇文章吧。树概念及结构树是一种 非线性 的数据结构,它是由 n ( n...
    99+
    2023-06-29
  • Java中二叉树与斐波那契函数的示例分析
    这篇文章主要介绍Java中二叉树与斐波那契函数的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目一解法class Solution {    pu...
    99+
    2023-06-29
  • JavaScript二叉树及遍历算法实例分析
    这篇“JavaScript二叉树及遍历算法实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • Java数据结构之二叉搜索树实例分析
    这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑...
    99+
    2023-06-30
  • C语言平衡二叉树的示例分析
    这篇文章给大家分享的是有关C语言平衡二叉树的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一...
    99+
    2023-06-25
  • Java求解二叉树中最近公共祖先的示例分析
    小编给大家分享一下Java求解二叉树中最近公共祖先的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目给定一个二叉树, 找到该树中两个指定节点的最近公...
    99+
    2023-06-15
  • Java C++ 算法题解leetcode669修剪二叉搜索树示例
    目录题目要求思路一:模拟迭代JavaC++思路二:递归JavaC++Rust题目要求 思路一:模拟迭代 依次判断每个节点是否合法:首先找出结果的根,若原根小了就拉右边的过来,大了...
    99+
    2024-04-02
  • Java数据结构超详细分析二叉搜索树
    目录1.搜索树的概念2.二叉搜索树的简单实现2.1查找2.2插入2.3删除2.4修改3.二叉搜索树的性能 1.搜索树的概念 二叉搜索树是一种特殊的二叉树,又称二叉查找树,二叉排序树,...
    99+
    2024-04-02
  • Java字符串,数组及二叉搜索树实例分析
    本文小编为大家详细介绍“Java字符串,数组及二叉搜索树实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java字符串,数组及二叉搜索树实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。题目一&nbs...
    99+
    2023-06-29
  • 带你了解Java数据结构和算法之二叉树
    目录1、树2、二叉树3、查找节点4、插入节点5、遍历树6、查找最大值和最小值7、删除节点  ①、删除没有子节点的节点②、删除有一个子节点的节点③、删除有两个子节点的节点④、删除有必要...
    99+
    2024-04-02
  • C++使用LeetCode实现二叉搜索树的示例分析
    这篇文章将为大家详细讲解有关C++使用LeetCode实现二叉搜索树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Given an integer n, generate all st...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作