zoukankan      html  css  js  c++  java
  • Java 实现二叉树

    原文链接:

    http://www.cnblogs.com/lzq198754/p/5857597.html

     1 public class TreeNode {
     2     private TreeNode leftNode;
     3     private TreeNode rightNode;
     4     private int value;
     5     private boolean isdeleteOrNot;
     6 
     7     public TreeNode getLeftNode() {
     8         return leftNode;
     9     }
    10 
    11     public void setLeftNode(TreeNode leftNode) {
    12         this.leftNode = leftNode;
    13     }
    14 
    15     public TreeNode getRightNode() {
    16         return rightNode;
    17     }
    18 
    19     public TreeNode() {
    20         super();
    21     }
    22 
    23     public void setRightNode(TreeNode rightNode) {
    24         this.rightNode = rightNode;
    25     }
    26 
    27     public int getValue() {
    28         return value;
    29     }
    30 
    31     public void setValue(int value) {
    32         this.value = value;
    33     }
    34 
    35     public boolean isIsdeleteOrNot() {
    36         return isdeleteOrNot;
    37     }
    38 
    39     public void setIsdeleteOrNot(boolean isdeleteOrNot) {
    40         this.isdeleteOrNot = isdeleteOrNot;
    41     }
    42 
    43     public TreeNode(int value) {
    44         this(null, null, value, false);
    45     }
    46 
    47     public TreeNode(TreeNode leftNode, TreeNode rightNode, int value, boolean isdeleteOrNot) {
    48         super();
    49         this.leftNode = leftNode;
    50         this.rightNode = rightNode;
    51         this.value = value;
    52         this.isdeleteOrNot = isdeleteOrNot;
    53     }
    54 
    55 }
      1 /**
      2  * 二叉树的 Java 实现
      3  * 
      4  */
      5 public class BinTree {
      6     private TreeNode rootNode;
      7 
      8     public TreeNode getRootNode() {
      9         return rootNode;
     10     }
     11 
     12     /**
     13      * 二叉树的插入操作
     14      */
     15     public void insertValue(int value) {
     16         TreeNode newNode = new TreeNode(value);
     17         // 如果根节点为空, 则新节点即是根节点
     18         if (rootNode == null) {
     19             rootNode = newNode;
     20             rootNode.setLeftNode(null);
     21             rootNode.setRightNode(null);
     22         } else {
     23             TreeNode currenNode = rootNode;
     24             TreeNode parenNode;
     25             while (true) {
     26                 parenNode = currenNode;
     27                 // 放在右边
     28                 if (newNode.getValue() > currenNode.getValue()) {
     29                     currenNode = currenNode.getRightNode();
     30                     if (currenNode == null) {
     31                         parenNode.setRightNode(newNode);
     32                         return;
     33                     }
     34                 } else {
     35                     // 放在左边
     36                     currenNode = currenNode.getLeftNode();
     37                     if (currenNode == null) {
     38                         parenNode.setLeftNode(newNode);
     39                         return;
     40                     }
     41 
     42                 }
     43             }
     44         }
     45     }
     46 
     47     /**
     48      * 二叉树的升序遍历
     49      */
     50     public void orderByAsc(TreeNode treeNode) {
     51         if (treeNode != null && treeNode.isIsdeleteOrNot() == false) {
     52             orderByAsc(treeNode.getLeftNode());
     53             System.out.println(treeNode.getValue());
     54             orderByAsc(treeNode.getRightNode());
     55         }
     56     }
     57 
     58     /**
     59      * 二叉树的降序遍历
     60      */
     61     public void orderByDesc(TreeNode treeNode) {
     62         if (treeNode != null && treeNode.isIsdeleteOrNot() == false) {
     63             orderByDesc(treeNode.getRightNode());
     64             System.out.println(treeNode.getValue());
     65             orderByDesc(treeNode.getLeftNode());
     66         }
     67     }
     68 
     69     /**
     70      * 二叉树的查找
     71      */
     72     public TreeNode findKey(int key) {
     73         TreeNode currenNode = rootNode;
     74         if (currenNode != null) {
     75             while (currenNode.getValue() != key) {
     76                 if (currenNode.getValue() > key) {
     77                     currenNode = currenNode.getLeftNode();
     78                 } else {
     79                     currenNode = currenNode.getRightNode();
     80                 }
     81                 if (currenNode == null) {
     82                     return null;
     83                 }
     84             }
     85             if (currenNode.isIsdeleteOrNot()) {
     86                 return null;
     87             } else {
     88                 return currenNode;
     89             }
     90         } else {
     91             return null;
     92         }
     93     }
     94 
     95     public static void main(String[] args) {
     96         BinTree binTree = new BinTree();
     97         binTree.insertValue(10);
     98         binTree.insertValue(12);
     99         binTree.insertValue(13);
    100         binTree.orderByAsc(binTree.getRootNode());
    101         System.out.println("-------------------");
    102         binTree.orderByDesc(binTree.getRootNode());
    103         System.out.println("-------------------");
    104         System.out.println(binTree.findKey(10));
    105     }
    106 
    107 }
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯VIP 算法训练 开心的金明
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯 算法训练 纪念品分组
    Java实现 蓝桥杯VIP 算法训练 校门外的树
    Java实现 蓝桥杯VIP 算法训练 统计单词个数
    Java实现 蓝桥杯VIP 算法训练 开心的金明
  • 原文地址:https://www.cnblogs.com/sunjunxi/p/8529069.html
Copyright © 2011-2022 走看看