当前位置:   article > 正文

java数据结构(2)二叉树插入_二叉树插入方法java实现

二叉树插入方法java实现

简单二叉树定义:一个节点下面最多拥有两个子节点,并且两个子节点分为左值和右值,左值比父节点要小,右值比父节点要大,下面,我们来利用java实现一棵如下图中的二叉树:


大家可以根据我的描述分析一下这棵二叉树

下面就来写代码实现这棵二叉树:

首先是要建立一个节点类Node

  1. package Tree;
  2. /**
  3.  * 节点类
  4.  * @author javadaodechengxuyuan
  5.  *
  6.  */
  7. public class Node {
  8.     private long value;
  9.     private Node leftNode;//节点下面的左节点
  10.     private Node RightNode;//节点下面的右节点
  11.     
  12.     //构造器
  13.     public Node(long value){
  14.         this.value=value;
  15.     }
  16.     public long getValue() {
  17.         return value;
  18.     }
  19.     public void setValue(long value) {
  20.         this.value = value;
  21.     }
  22.     public Node getLeftNode() {
  23.         return leftNode;
  24.     }
  25.     public void setLeftNode(Node leftNode) {
  26.         this.leftNode = leftNode;
  27.     }
  28.     public Node getRightNode() {
  29.         return RightNode;
  30.     }
  31.     public void setRightNode(Node rightNode) {
  32.         RightNode = rightNode;
  33.     }
  34. }


这是二叉树类,就是这个类用来操作节点类的:

  1. package Tree;
  2. /**
  3.  * @author javadaodechengxuyuan
  4.  * 二叉树:每个节点有最多两个分叉,
  5.  * 分别作为父节点的左值和右值,遵循左小右大的规则进行分叉
  6.  */
  7. public class Tree {
  8.     private Node root;
  9.     private Node current;
  10.     private Node parent;
  11.     /**
  12.      * @author javadaodechengxuyuan
  13.      * 为一颗二叉树添加节点
  14.      */
  15.     public void insert(long value){//为二叉树插入新的节点
  16.         //创建新的节点
  17.         Node newNode=new Node(value);
  18.         
  19.         //创建完后就该考虑把这个节点放在哪里了,下面这些代码就是用来判断将这个节点放在哪里的
  20.         if(root==null){
  21.             this.root=newNode;//如果root为空,那么第一次调用添加时应给root初始化
  22.         }else{
  23.             this.current=root;//初始化current
  24.             while(true){//进入死循环,一直等到给newNode找到合适的位置时进行终止死循环
  25.                 if(this.current.getValue()>value){//比root小,放在左侧
  26.                     this.parent=this.current;//让parent一直保留本次的current
  27.                     this.current=this.current.getLeftNode();
  28.                     if(this.current==null){//如果当前的左值为空,那么就终止循环并赋值给这个左值
  29.                         this.parent.setLeftNode(newNode);//将这个新节点放在这个位置
  30.                         return;//最终找到合适位置,死循环终止
  31.                     }
  32.                 }else{//比root大,放在右侧
  33.                     this.parent=this.current;//让parent一直保留本次的current
  34.                     this.current=this.current.getRightNode();//将当前的节点重新赋值给下一次需要比较的节点
  35.                     if(this.current==null){//如果当前的右值为空,那么就终止循环并赋值给这个左值
  36.                         this.parent.setRightNode(newNode);//将这个新节点放在这个位置
  37.                         return;//最终找到合适位置,死循环终止
  38.                     }
  39.                 }
  40.             }
  41.         }    
  42.     }
  43.     public Node getRoot() {
  44.         return root;
  45.     }
  46.     public void setRoot(Node root) {
  47.         this.root = root;
  48.     }
  49. }


这是测试类:

  1. package Tree;
  2. /**
  3.  * 测试类
  4.  * @author javadaodechengxuyuan
  5.  *
  6.  */
  7. public class Test {
  8.     public static void main(String args[]){
  9.         Tree t=new Tree();
  10.         t.insert(10);//根节点
  11.         t.insert(20);
  12.         t.insert(15);
  13.         t.insert(9);
  14.         t.insert(35);
  15.         System.out.print(t.getRoot().getValue()+"、");//第0层:根节点
  16.         System.out.print(t.getRoot().getLeftNode().getValue()+"、");//第一层左值
  17.         System.out.print(t.getRoot().getRightNode().getValue()+"、");//第一层右值
  18.         System.out.print(t.getRoot().getRightNode().getLeftNode().getValue()+"、");//第二层左值
  19.         System.out.print(t.getRoot().getRightNode().getRightNode().getValue());//第二层右值
  20.         //输出结果应为:10、9、20、15、35
  21.     }
  22. }

输出结果应该为:

109201535

这只是简单的插入功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/879011
推荐阅读
相关标签
  

闽ICP备14008679号