program strom; type uk=^tree; tree = record data:integer; left:^tree; right:^tree; end; var root:^tree; procedure insert0(x:integer); var p:uk; begin new(p); p^.data:=x; p^.left:=nil; p^.right:=nil; root:=p; end; procedure insert (x:integer); var p,z:uk; begin p:=root; z:=nil; while (p<>nil) and (p^.data<>x) do begin z:=p; if p^.data > x then p:=p^.left else p:=p^.right; end; if p=nil then begin new (p); p^.data:=x; p^.left:=nil; p^.right:=nil; if z = nil then root := p else if x < z^.data then z^.left := p else z^.right:=p; end; end; procedure enter (var p: uk; x:integer); begin if p = nil then begin new (p); p^.data := x; p^.left := nil; p^.right := nil; end else if p^.data = x then (* duplicita *) else if x < p^.data then enter (p^.left, x) else enter (p^.right, x) end; procedure store (x:integer); var p:^uk; begin p:=addr (root); while (p^<>nil) and (p^^.data<>x) do if p^^.data > x then p := addr (p^^.left) else p:= addr (p^^.right); if p^=nil then begin new (p^); p^^.data:=x; p^^.left:=nil; p^^.right:=nil; end; end; function search(x:integer):uk; var p:uk; begin p:=root; while (p<>nil) and (p^.data<>x) do begin if p^.data > x then p:=p^.left else p:=p^.right; end; result:=p; end; function find(p: uk; x:integer):uk; begin if p = nil then result := nil else if p^.data = x then result := p else if x < p^.data then result := find (p^.left, x) else result := find (p^.right, x) end; function select(var r: uk): uk; begin if r^.right<>nil then result := select (r^.right) else begin result := r; // drive nez r zmenim r := r^.left; // result^.left zatim obsahuje starou hodnotu, kterou prepiseme end; end; procedure remove(var p: uk; x:integer); var t, f: uk; begin if p=nil then // x neni ve stromu else if xp^.data then remove(p^.right,x) else begin t:=p; if (p^.left=nil) and (p^.right=nil) then p:=nil else if p^.right=nil then //pouze levĂ˝ strom p:=p^.left else if p^.left=nil then p:=p^.right else begin f:=select(p^.left); p:=f; p^.left:=t^.left; p^.right:=t^.right; end; dispose (t); end end; procedure zobraz (p:uk; level: integer = 1); begin if p <> nil then begin zobraz (p^.left, level+1); writeln (' ' : 4*level, p^.data); zobraz (p^.right, level+1); end; end; begin root := nil; enter (root, 10); enter (root, 5); enter (root, 7); enter (root, 12); remove (root, 10); tisk (root); writeln; zobraz (root); readln; end. private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) { TreePath [] paths = evt.getPaths(); if (paths.length == 1) { TreePath p = paths [0]; Object obj = p.getLastPathComponent(); if (obj instanceof MyNode) { MyNode node = (MyNode) obj; jButton1.setText (node.path); } } } package stromecek; import javax.swing.*; import javax.swing.tree.*; import java.io.*; public class MyNode extends DefaultMutableTreeNode { public String path; public boolean scanned = false; public MyNode (String p) { super (p); path = p; } } MyNode root = new MyNode ("abc"); DefaultTreeModel m = new DefaultTreeModel (root); private void showDir (MyNode above, String path, int level) { File dir = new File (path); String [] array = dir.list(); above.scanned = true; if (array != null) for (String s : array) { MyNode node = new MyNode (s); node.path = path + "\\" + s; above.add(node); m.nodesWereInserted (above, new int [] {above.getIndex(node)}); if (level > 1) { File f = new File (path + "\\" + s); if (f.isDirectory()) showDir(node, path+ "\\" + s, level-1); } } } private void rescanDir (MyNode above, int level) { if (above.scanned) { if (level > 1) { int cnt = above.getChildCount(); for (int i = 0; i < cnt; i++) { TreeNode tn = above.getChildAt(i); if (tn instanceof MyNode) { MyNode node = (MyNode) tn; rescanDir(node, level-1); } } } } else { showDir (above, above.path, level); } } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { showDir (root, "c:\\Program Files", 2); }