TP4
This commit is contained in:
parent
85a3179721
commit
b456ffc7b7
BIN
Enoncés/TP/TP4_Arbre.pdf
Normal file
BIN
Enoncés/TP/TP4_Arbre.pdf
Normal file
Binary file not shown.
146
src/TP4/ABin.java
Normal file
146
src/TP4/ABin.java
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
package TP4;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JTree;
|
||||||
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class implements a binary tree containing elements of type {@code T}
|
||||||
|
* @author Dr. Denis PALLEZ </br>
|
||||||
|
* {@link http://denispallez.i3s.unice.fr}
|
||||||
|
* @version 2016-2017
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ABin<T> {
|
||||||
|
T value ;
|
||||||
|
ABin<T> sag;
|
||||||
|
ABin<T> sad;
|
||||||
|
|
||||||
|
public ABin() {
|
||||||
|
value=null;
|
||||||
|
sag=null;
|
||||||
|
sad=null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ABin(T val, ABin<T> fg, ABin<T> fd) {
|
||||||
|
value = val;
|
||||||
|
sag=fg ;
|
||||||
|
sad=fd ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ABin(T[] t) {
|
||||||
|
ABin<T> a = tas(t, 0);
|
||||||
|
this.value = a.value;
|
||||||
|
this.sag = a.leftChild();
|
||||||
|
this.sad = a.rightChild();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ABin<T> tas(T[] t, int pos) {
|
||||||
|
if(pos < t.length) {
|
||||||
|
return new ABin<T>(t[pos], tas(t, 2 * pos + 1), tas(t, 2 * pos + 2));
|
||||||
|
} else {
|
||||||
|
return new ABin<T>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int alea(int min, int max) {
|
||||||
|
return (int) (min + Math.random()* (max-min));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ABin<Integer> createRandom(int nb) {
|
||||||
|
if(nb <= 0) {
|
||||||
|
return new ABin<>();
|
||||||
|
} else {
|
||||||
|
if(alea(0, 2) == 1) {
|
||||||
|
return new ABin<>(alea(0, 100), createRandom(nb-1), new ABin<>());
|
||||||
|
} else {
|
||||||
|
return new ABin<>(alea(0, 100), createRandom(nb-1), createRandom(nb-2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return (value==null) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLeaf() {
|
||||||
|
return !isEmpty() && sag.isEmpty() && sad.isEmpty() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ABin<T> leftChild() {
|
||||||
|
return sag ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ABin<T> rightChild() {
|
||||||
|
return sad ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getUserObject() {
|
||||||
|
return value ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserObject(T val) {
|
||||||
|
value=val ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
if(this.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return 1 + this.leftChild().size() +this.rightChild().size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDepht() {
|
||||||
|
if(this.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return 1+ Math.max(this.leftChild().getDepht(), this.rightChild().getDepht());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
if(this.isEmpty()) {
|
||||||
|
return "vide";
|
||||||
|
} else {
|
||||||
|
return "(" + this.value + "," + this.leftChild().toString() + "," + this.rightChild().toString() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(T v) {
|
||||||
|
if(this.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if(this.getUserObject().equals(v)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return (this.leftChild().contains(v) || this.rightChild().contains(v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DefaultMutableTreeNode toNTree() {
|
||||||
|
if (!isEmpty()) {
|
||||||
|
DefaultMutableTreeNode node = new DefaultMutableTreeNode(value.toString()) ;
|
||||||
|
if (!sag.isEmpty()) node.add(sag.toNTree()) ;
|
||||||
|
if (!sad.isEmpty()) node.add(sad.toNTree()) ;
|
||||||
|
return node ;
|
||||||
|
}
|
||||||
|
else return null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showInFrame() {
|
||||||
|
JFrame f= new JFrame("A N-ary Tree vizualized with JTree");
|
||||||
|
f.setSize(800, 600);
|
||||||
|
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
f.setLocationRelativeTo(null);
|
||||||
|
// Ajouter l'arbre a ce cadre
|
||||||
|
f.getContentPane().add(new JTree(this.toNTree()));
|
||||||
|
// Visualiser le cadre
|
||||||
|
f.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
27
src/TP4/DemoABin.java
Normal file
27
src/TP4/DemoABin.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package TP4;
|
||||||
|
|
||||||
|
public class DemoABin {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Integer[] tab = {5,3,9,4,8,6,4,3,1,1,9,2};
|
||||||
|
ABin<Integer> a1 = new ABin<>(197,new ABin<>(94,new ABin<>(8, new ABin<>(), new ABin<>()),new ABin<>()), new ABin<>(24,new ABin<>(),new ABin<>()));
|
||||||
|
ABin<Integer> a2 = new ABin<Integer>(tab);
|
||||||
|
ABin<Integer> a3 = ABin.createRandom(5);
|
||||||
|
|
||||||
|
boolean checkDeptha1 = a1.getDepht() == 3;
|
||||||
|
boolean checkSizea1 = a1.size() == 4;
|
||||||
|
System.out.println("getDeth a1 : " + checkDeptha1);
|
||||||
|
System.out.println("getSize a1 : " + checkSizea1);
|
||||||
|
System.out.println(a1.toString());
|
||||||
|
|
||||||
|
boolean checkDeptha2 = a2.getDepht() == 4;
|
||||||
|
boolean checkSizea2 = a2.size() == 12;
|
||||||
|
System.out.println("getDeth a2 : " + checkDeptha2);
|
||||||
|
System.out.println("getSize a2 : " + checkSizea2);System.out.println(a2.toString());
|
||||||
|
|
||||||
|
//a1.showInFrame();
|
||||||
|
//a2.showInFrame();
|
||||||
|
a3.showInFrame();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user