chapter 8 - binary trees
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
,