• 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 }
  • 相关阅读:
    一台Ubuntu server上安装多实例MySQL
    用VirtualBox构建MySQL测试环境笔记
    Mac点滴
    MySQL复制(三) --- 高可用性和复制
    Linux性能监控的几个工具(转)
    前端读者 | Javascript设计模式理论与实战:状态模式
    前端读者 | 为什么页面跟设计稿差距这么大?是啊!为毛啊?
    前端读者 | 由setTimeout引发的JS引擎运行机制的研究
    前端读者 | Web App开发入门
    前端读者 | 从一行代码里面学点JavaScript
  • 原文地址:https://www.cnblogs.com/sunjunxi/p/8529069.html
Copyright © 2020-2023  润新知