chapter 8 - binary trees

52
ΗΜΜΥ (ΠΛΗ) 102 Δομημένος Προγραμματισμός Δρ. Αντώνιος Δεληγιαννάκης Τμήμα ΗΜΜΥ Πολυτεχνείο Κρήτης

Upload: icedplanet

Post on 21-Sep-2015

232 views

Category:

Documents


6 download

DESCRIPTION

Java programming.Making binary trees in object oriented programming.

TRANSCRIPT

  • () 102

    .

  • :. : 141.A21 (1 . ) Email: **[email protected]**: http://www.softnet.tuc.gr/~adeli:28210-37415

    http://courses.ced.tuc.gr/

  • () (root). . .root

  • ( ) . . . / , ( / 0). 0 1 2

  • (binary tree) : (left) (right) . ( ) ...

    , , : ( )

  • : , , () ()

    , ...

  • 0 1 2 root

  • , ()

  • public class tnode { protected Item info; protected tnode left, right;

    public tnode(Item a) { info = a; } // left, right;;; public Item getValue() { return info; } public void setValue(Item a) { info = a; }

    public tnode getLeft() { return left; } public tnode getRight() { return right; } public void setLeft(tnode a) { left = a; } public void setRight(tnode a) { right = a; }}

  • public class binaryTree { protected tnode root; protected int height; }

  • ,

    =

  • - public void insert(Item a) { insert(a, root); } // public void insert(Item a, tnode n) { if (n == null) { // root = new tnode(a); return; // 0 } tnode left = n.getLeft(); // tnode right = n.getRight(); // if ( a.less(n.getValue()) ) { // if (left == null) // n.setLeft( new tnode(a) ); else { insert(a, left); return; } // } else { if (right == null) // n.setRight(new tnode(a)); else { insert(a, right); return; } // } } ... root (: , n==null => n == root) 2 . , n . , n

  • n.setRight(new node(a));n 6. 6n

  • , , , () ( )

  • public tnode search(Item a) { return search(a, root); }

    public tnode search(Item a, tnode n) { if (n == null) // return null;

    if ( a.equals(n.getValue()) ) // a return n; else if ( a.less(n.getValue()) ) return search(a, n.getLeft()); // return else return search(a, n.getRight()); }

  • nn 6 . 1 . n == null -

  • d; d+1 ( ) : 1 + 2 + 4 + 8 + + 2d 2d+1 1 / (2 - 1) = 2d+1 1

    , /

  • ;

    1,000,000,000 , log 1,000,000,000 30 !!!!!!!!

    ,

  • ;;; 2 ; ; , ;

    ... ( )

  • (inorder) : , ( ) M

    ;

    .

  • public void inorder() { inorder(root); }

    public void inorder(tnode n) { if (n != null) { inorder(n.getLeft()); System.out.println(Node info = + n.getValue()); inorder(n.getRight()); }}

  • 2 4 6 7 12 23 30 -

  • (preorder) : , inorder ...

  • (preorder) : , inorder ...

  • public void preorder() { preorder(root); }

    public void preorder(tnode n) { if (n != null) { System.out.println(Node info = + n.getValue()); preorder(n.getLeft()); preorder(n.getRight()); }}

  • 7 4 2 6 23 12 30

  • (postorder) :

    inorder ...

  • public void postorder() { postorder(root); }

    public void postorder(tnode n) { if (n != null) { postorder(n.getLeft()); postorder(n.getRight()); System.out.println(Node info = + n.getValue()); }}

  • 2 6 4 12 30 23 7 -

  • ... (inorder) : 5 13 24 20 40 50:

    (inorder) : 5 13 24 30 40 50: ..., preorder postorder ,

  • ... ( ) 67, 90, 71, 69, 63, 110, 100. () 3 (, , ). , .

    inorder ( ) preorder , postorder ,

  • ( ) 67, 90, 71, 69, 63, 110, 100. () 3 (, , ). , . preorder , ...67 63 69, 67

    preorder

  • ( ) 67, 90, 71, 69, 63, 110, 100. () 3 (, , ). , . postorder , ...100

  • ()

    :

  • 7234302126insert(7)7=removeFirst()insert(4)insert(23)4=removeFirst()insert(2)insert(6)23=removeFirst()insert(12)insert(30)2=removeFirst()6=removeFirst()headtailheadheadheadheadheadtailtailtailtailtail

  • // // Itempublic class tnodeItem extends Item {private tnode key;

    public tnodeItem(tnode k) { key = k; }public Object key() { return key; }

    public boolean equals(Item k) {return key.getValue().equals( ((tnode) k.key()).getValue() );}public boolean less(Item k) {return key.getValue().less( ((tnode) k.key()).getValue() );}public String toString() { return "NODE with key: " + key.getValue().toString(); }}

  • (2)public void breadthFirst() { if (root != null) { queue q = new queue();q.insert(new tnodeItem(root)); breadthFirst(q); }}

    private void breadthFirst(queue q) { tnodeItem n = (tnodeItem)(q.removeFirst()); if (n == null) return; // root == null System.out.println(n); tnode help = (tnode)n.key(); if (help.getLeft() != null) q.insert( new tnodeItem(help.getLeft()) ); if (help.getRight() != null) q.insert( new tnodeItem(help.getRight()) ); if (q.isEmpty() == false) breadthFirst(q);}

  • , , , ( ) ,

  • 2 10. 11 11 10 5 13

  • ( ) public void delete(Item a) { tnode k = root, pk = null;

    while ((k != null) && ( !k.equals( k.getValue() ) ) ) { pk = k; // k k if (a.less( k.getValue()) ) k = k.getLeft(); else k = k.getRight(); }

    if (k == null) return; //

  • if (k.getRight() == null) { // k.setValue(null); if (k == root) // root root = k.getLeft(); else { // O k pk? if (pk.getLeft() == k) // pk.setLeft(k.getLeft()); else pk.setRight(k.getLeft()); } k.setLeft(null); }

  • else { // k.getRight() != null tnode b = k.getRight(), pb = k; while (b.getLeft() != null) { pb = b; b = b.getLeft(); } // . // , root !!! k.setValue(b.getValue()); b.setValue(null); if (pb == k) // k k.setRight(b.getRight()); else pb.setLeft(b.getRight()); b.setRight(null); }}

  • 2 10. 11 :k != nullk.getRight() != nullpb != k

    :k.setValue(11); b.setValue(null);pb.setLeft(b.getRight()); b.setRight(null);163011355201371218323714222pk

  • 16. 18 :k != nullk.getRight() != nullpb != k

    :k.setValue(18); b.setValue(null);pb.setLeft(b.getRight()); b.setRight(null);163011355201371218323714222pk = nullk1830113552013712323714222

  • 11. 13 :k != nullk.getRight() != nullpb == k

    :k.setValue(13); b.setValue(null);k.setRight(b.getRight());b.setRight(null);18301335520147323722218301135520137323714222pk

  • 14. :k != nullk.getRight() == nullk != rootpk.getLeft() != k

    :k.setValue(null); pk.setRight(k.getLeft());k.setLeft(null);1830133552073237222183013355201473237222pk

  • , ,

  • 30 next70 next79 next29 next79 next59 next71 next21 next81 next 10 . a a%10

    0123456789

  • ( )public class hashTable { final public int arrayLength = 10; protected sortedList[] arrayInfo;

    public hashTable() { arrayInfo = new sortedList[arrayLength]; for (int i = 0; i < arrayLength; i++) arrayInfo[i] = new sortedList(); }

    public int hashFunction(Item a) { return a.hashCode() % arrayLength; // Object }

  • - ( ) , ...

  • public void insert(Item a) { int pos = hashFunction(a); // arrayInfo[pos].insert(a); } public void delete(Item a) { int pos = hashFunction(a); arrayInfo[pos].delete(a); } public node search(Item a) { int pos = hashFunction(a); return arrayInfo[pos].search(a); }}

  • . hashCode Item

    ,