Implement a class for a binary tree of integers.
[TP_POO.git] / Arbres / ArbreBinaire.java
CommitLineData
d7dd93e3
JB
1
2/**
3 * Binary tree class.
4 * A binary tree is a ordered value tree with only two childs by node
5 */
6public class ArbreBinaire {
7
8 private class IntNode {
9 private int data;
10 private IntNode leftIntNode;
11 private IntNode rightIntNode;
12
13 IntNode(int value) {
14 setData(value);
15 setLeftNode(null);
16 setRightNode(null);
17 }
18
19 IntNode(int value, IntNode leftNode, IntNode rightNode) {
20 setData(value);
21 setLeftNode(leftNode);
22 setRightNode(rightNode);
23 }
24
25 private int getData() {
26 return data;
27 }
28
29 private void setData(int value) {
30 data = value;
31 }
32
33 private IntNode getLeftNode() {
34 return leftIntNode;
35 }
36
37 private void setLeftNode(IntNode leftNode) {
38 leftIntNode = leftNode;
39 }
40
41 private IntNode getRightNode() {
42 return rightIntNode;
43 }
44
45 private void setRightNode(IntNode rightNode) {
46 rightIntNode = rightNode;
47 }
48
49 }
50
51 private IntNode rootNode;
52
53 ArbreBinaire() {
54 setRootNode(null);
55 }
56
57 private void setRootNode(IntNode node) {
58 rootNode = node;
59 }
60
61 private IntNode getRootNode() {
62 return rootNode;
63 }
64
65 private boolean isEmpty() {
66 return (getRootNode() == null);
67 }
68
a323eab8
JB
69 private IntNode inserer_rec(IntNode currentNode, int value) {
70 if (currentNode == null) {
71 return new IntNode(value);
72 } else if (value < currentNode.getData()) {
73 currentNode.setLeftNode(inserer_rec(currentNode.getLeftNode(), value));
74 } else if (value > currentNode.getData()) {
75 currentNode.setRightNode(inserer_rec(currentNode.getRightNode(), value));
76 } else {
77 /* equality */
78 return currentNode;
79 }
80 return currentNode;
81 }
82
d7dd93e3 83 public void inserer(int value) {
a323eab8
JB
84 setRootNode(inserer_rec(rootNode, value));
85 }
d7dd93e3 86
a323eab8
JB
87 private IntNode supprimer_rec(IntNode currentNode, int value) {
88 if (currentNode == null) {
89 return null;
90 } else if (value == currentNode.getData()) {
91 if (currentNode.getLeftNode() == null && currentNode.getRightNode() == null) {
92 return null;
93 } else if (currentNode.getRightNode() == null) {
94 return currentNode.getLeftNode();
95 } else if (currentNode.getLeftNode() == null) {
96 return currentNode.getRightNode();
97 } else {
98 int smallestValue = findSmallestData(currentNode.getRightNode());
99 currentNode.setData(smallestValue);
100 currentNode.setRightNode(supprimer_rec(currentNode.getRightNode(), smallestValue));
101 return currentNode;
102 }
103 } else if (value < currentNode.getData()) {
104 currentNode.setLeftNode(supprimer_rec(currentNode.getLeftNode(), value));
105 } else {
106 currentNode.setRightNode(supprimer_rec(currentNode.getRightNode(), value));
107 }
108 return currentNode;
d7dd93e3
JB
109 }
110
111 public void supprimer(int value) {
a323eab8
JB
112 supprimer_rec(rootNode, value);
113 }
114
115 private boolean hasDataRec(IntNode currentNode, int value) {
116 if (currentNode == null) {
117 return false;
118 }
119 if (value == currentNode.getData()) {
120 return true;
121 }
122 return value < currentNode.getData() ? hasDataRec(currentNode.getLeftNode(), value) : hasDataRec(currentNode.getRightNode(), value);
123 }
124
125 public boolean hasData(int value) {
126 return hasDataRec(rootNote, value);
127 }
128
129 private int findSmallestData(IntNode node) {
130 return node.getLeftNode() == null ? node.getData() : findSmallestData(node.getLeftNode());
131 }
132
133 public afficher_rec(IntNode currentNode) {
134 if (currentNode.getLeftNode() != null) {
135 afficher_rec(currentNode.getLeftNode());
136 } else if (currentNode.getRightNode() != null) {
137 afficher_rec(currentNode.getRightNode());
138 }
139 System.out.println("Valeur dans le noeud : ");
140 }
141
142 public static void main(String[] args) {
143 ArbreBinaire Btree = new ArbreBinaire();
144
145 Btree.inserer(5);
146 Btree.inserer(2);
147 Btree.inserer(7);
148 Btree.inserer(1);
149
150 String Btreeout = Btree.toString();
151 System.out.println(Btreeout);
d7dd93e3
JB
152
153 }
154
155}