algorithmen und datenstrukturen fs 2008 bäume

12
Helmut Schauer Educational Engineering Lab Department for Informatics University of Zurich Algorithmen und Datenstrukturen FS 2008 Bäume

Upload: jermaine-lindsay

Post on 31-Dec-2015

17 views

Category:

Documents


1 download

DESCRIPTION

Algorithmen und Datenstrukturen FS 2008 Bäume. Binary Tree in Java (1) class BinaryTree { class Node { static Node empty = new Node(null) { boolean isEmpty() {return true;} }; Object info; Node left, right; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algorithmen und Datenstrukturen FS 2008 Bäume

1

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Algorithmen und Datenstrukturen

FS 2008

Bäume

Page 2: Algorithmen und Datenstrukturen FS 2008 Bäume

2

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Binary Tree in Java (1)

class BinaryTree {class Node { static Node empty = new Node(null) { boolean isEmpty() {return true;} }; Object info; Node left, right; Node(Object x) {info = x; left = empty; right = empty;} boolean isEmpty() {return false;} ...}Node root;BinaryTree() {root = empty;}boolean isEmpty() {return root.isEmpty();}...

}

Page 3: Algorithmen und Datenstrukturen FS 2008 Bäume

3

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Binary Tree in Java (2)Anzahl der Knoten

int count() {if (isEmpty()) return 0;else return 1+left.count()+right.count();

}

Page 4: Algorithmen und Datenstrukturen FS 2008 Bäume

4

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Binary Tree in Java (3)Maximale Höhe

int height() {if (isEmpty()) return 0;else return 1+Math.max(left.height(),right.height());

}

Page 5: Algorithmen und Datenstrukturen FS 2008 Bäume

5

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Preorder Traversieren (rekursiv)

preOrder() {if (!isEmpty()) {

visit(info);left.preOrder();right.preOrder();

}}

Page 6: Algorithmen und Datenstrukturen FS 2008 Bäume

6

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Postorder Traversieren (rekursiv)

postOrder() {if (!isEmpty()) {

left.postOrder();right.postOrder();visit(info);

}}

Page 7: Algorithmen und Datenstrukturen FS 2008 Bäume

7

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Inorder Traversieren (rekursiv)

inOrder() {if (!isEmpty()) {

left.inOrder();visit(info);right.inOrder();

}}

Page 8: Algorithmen und Datenstrukturen FS 2008 Bäume

8

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Preorder Traversieren (iterativ)

preOrder() {if (isEmpty()) return;Stack stack = new Stack();stack.push(root);do {

Node t = (Node) stack.pop();visit(t.info);if (!t.right.isEmpty())

stack.push(t.right);if (!t.left.isEmpty())

stack.push(t.left);} while (!stack.isEmpty());

}

Page 9: Algorithmen und Datenstrukturen FS 2008 Bäume

9

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Levelorder Traversieren (iterativ)

levelOrder() {if (isEmpty()) return;Queue queue = new Queue();queue.put(root);do {

Node t = (Node) queue.get();visit(t.info);if (!t.left.isEmpty())

queue.put(t.left);if (!t.right.isEmpty())

queue.put(t.right);} while (!queue.isEmpty());

}

Page 10: Algorithmen und Datenstrukturen FS 2008 Bäume

10

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Binäres Suchen in einem Sortierbaum

Object search(Comparable x) {

if (isEmpty())

return null; // x not found

if (x.compareTo(info)<0)

return left.search(x);

if (x.compareTo(info)>0)

return right.search(x);

else

return info; // x found

}

Page 11: Algorithmen und Datenstrukturen FS 2008 Bäume

11

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Einfügen in einen Sortierbaum

Node insert(Comparable x) {

if (isEmpty())

return new Node(x);

if (x.compareTo(info)<0)

left = left.insert(x);

else

right = right.insert(x);

return this;

}

Page 12: Algorithmen und Datenstrukturen FS 2008 Bäume

12

Helmut SchauerEducational Engineering LabDepartment for InformaticsUniversity of Zurich

Entfernen aus einem Sortierbaum

Node remove(Comparable x) {if (isEmpty()) return this;if (x.compareTo(info)<0)

left = left.remove(x);else if (x.compareTo(info)>0)

right = right.remove(x); else if (left.isEmpty()) return right;else if (right.isEmpty()) return left;else {

Node t = right;while (!t.left.isEmpty()) t = t.left;info = t.info;right =

right.remove((Comparable)info);}return this;

}