二叉树的java实现,超级简单讲解版

二叉树的基本定义简而言之:二叉树就是度不能超过2的树(每个树只能有两个节点)
满二叉树:
一个二叉树 , 如果每一个层的结点树达到最大值 , 则在这个树就是满二叉树
完全二叉树:
叶结点只能出现在最下层和次下层 , 并且最下面那一层的结点都集中在该层最左边的若干位置的二叉树
二叉查找树:
二叉查找树是一种特殊的二叉树 , 相对较小的值保存在左结点中 , 较大的值保存在右结点中 。
根据对图的观察 , 我们发现二叉树其实就是由一个一个的结点及其之间的关系组成的 , 按照面向对象的思想 , 我们设计一个结点来描述结点这个事务 。
首先我们先想着实现二叉树需要一些什么参数?
private static class Node{public Node left;public Node right;public Integer key;public String value;public Node(Node left, Node right, Integer key, String value) {this.left = left;this.right = right;this.key = key;this.value = https://www.isolves.com/it/cxkf/sf/2021-04-12/value;}}在上面我们定义了left , right , key , value四个参数 , 并且定义了这个类的构造方法
我们看插入方法put思想:

  1. 如果当树中没有任何一个结点 , 则直接把新结点当根结点使用
  2. 如果当前树不为空 , 就从根结点开始
    2-1:如果要查询的key , 小于当前结点的key , 则继续查找当前结点的左子结点2-2:如果新结点的key大于当前结点的key , 则继续找当前结点的右子结点2-3:如果新结点的key等于当前结点的key , 则树中已经存在这样的结点 , 替换该结点的value值就好
那么我们要怎么实现呢?
//向树中插入一个键值对public void put(Integer key,String value){root=put(root,key,value);}//给指定的数x添加一个键,添加一个键值对 , 并返回添加后的新数private Node put(Node tree,Integer key,String value){if(tree==null){//个数加1n++;//直接把新结点当成根结点使用return new Node(null,null,key,value);}//比较key,如果新结点大于当前结点的key , 继续寻找当前结点的右子结点if(key > tree.key){tree.right=put(tree.right,key,value);}else if(key<tree.key){//新结点的key小于当前结点的key,继续找当前结点的左子结点tree.left=put(tree.left,key,value);}else{//新结点的key等于当前结点的keytree.value=https://www.isolves.com/it/cxkf/sf/2021-04-12/value;}return tree;}在上面的代码块中 , 我们定义了两个put方法 , 一个是给其他类操作的 , 一个是给自己类操作的 , 对于外部的用户来说 , 他只需要将键值对传递进来就好了 , 排序是我们程序员的事 , 所以 , 我们这里的put只有两个参数:
【二叉树的java实现,超级简单讲解版】public void put(Integer key,String value)然后我们通过这个put方法再去调用我们内部的put方法 , 在这个方法中 , 我们首先要把我们的根结点root传递进去 , 然后再将前端传给我们的key:value传递进去
private Node put(Node tree,Integer key,String value)这样 , 我们就可以在这个put上进行我们一开始定义的开发流程了:
  1. 如果树中没有结点 , 就把当前插入的结点当成首节点使用:
if(tree==null){//个数加1n++;//直接把新结点当成根结点使用return new Node(null,null,key,value);}
  1. 如果树不为空 , 就从根结点开始遍历 , 也就是root结点
    2-1. 如果要查询的key , 小于当前结点的key , 则继续查找当前结点的左子结点
//比较key,如果新结点大于当前结点的key , 继续寻找当前结点的右子结点if(key > tree.key){tree.right=put(tree.right,key,value);}2-2. 如果新结点的key大于当前结点的key , 则继续找当前结点的右子结点
else if(key<tree.key){//新结点的key小于当前结点的key,继续找当前结点的左子结点tree.left=put(tree.left,key,value);}2-3:如果新结点的key等于当前结点的key , 则树中已经存在这样的结点 , 替换该结点的value值就好
else{//新结点的key等于当前结点的keytree.value=https://www.isolves.com/it/cxkf/sf/2021-04-12/value;}现在put方法就执行完毕了 , 我们把一个前端传递过来的值放入了二叉树中.


推荐阅读