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 }
原文地址:https://www.cnblogs.com/sunjunxi/p/8529069.html