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 x<p^.data then
     remove(p^.left,x)
   else if x>p^.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);
    }
 
stromecek.txt · Last modified: 2014/03/13 15:12 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki