import java.util.*;
import java.awt.*;class Binary_sort_tree
{
bnodetp bst;
boolean found=false;
bnodetp f=null;
String errorMessage=null;
Vector bnodetpVector=new Vector();
Vector cenciVector=new Vector();
public Binary_sort_tree()
{
bst=null;
errorMessage=null;
} public bnodetp srch_bstree(bnodetp bst,int k)//查找节点
{
found=false;
if(bst==null)
{
found=false;
return f;
}
else if(bst.key==k)
{
found=true;
f=bst;
return(bst);
}
else if(k<bst.key)
{
f=bst;
return(srch_bstree(bst.lchild,k));
}
else
{
f=bst;
return(srch_bstree(bst.rchild,k));
}
} public void ins_bstree(int k) //插入节点
{
bnodetp s=new bnodetp();
s.key=k;
s.lchild=null;
s.rchild=null; if(bst==null)
{
bst=s;
}
else if(k<f.key)
{
f.lchild=s;
}
else if(k>f.key)
{
f.rchild=s;
}
else
{
if(f.lchild!=null)
{
f=f.lchild;
} while(f.rchild!=null)
{
f=f.rchild;
}
f.rchild=s;
}
} public void inorder(bnodetp bst)//中序遍历二叉树
{
if(bst!=null)
{
inorder(bst.lchild);
visit(bst);
inorder(bst.rchild);
}
} public void visit(bnodetp bst)
{
//自己加入需要的代码
} public void cenciorder(bnodetp bst) //按树的层次遍历二叉树
{
if(bst!=null)
{
bnodetpVector.addElement(bst);
}
while(!bnodetpVector.isEmpty())
{
bnodetp temp=(bnodetp)bnodetpVector.elementAt(0);
bnodetpVector.removeElementAt(0);
                          //加入所需的代码                           
if(temp.lchild!=null)
{
bnodetpVector.addElement(temp.lchild);
}
if(temp.rchild!=null)
{
bnodetpVector.addElement(temp.rchild);
}
}
} public void del_bstree(bnodetp bst,int k)//删除节点
{
bnodetp p=srch_bstree(bst,k);
if(!found)
{
errorMessage="不存在该节点";
return;
}
if(p.lchild==null||p.rchild==null)
{
if(delf!=null)
{
if(delf.lchild==p&&p.lchild!=null)
{
delf.lchild=p.lchild;
}
else if(delf.lchild==p&&p.rchild!=null)
{
delf.lchild=p.rchild;
}
else if(delf.rchild==p&&p.lchild!=null)
{
delf.rchild=p.lchild;
}
else if(delf.rchild==p&&p.rchild!=null)
{
delf.rchild=p.rchild;
} if(delf.lchild==p&&p.lchild==null&&p.rchild==null)
{
delf.lchild=null;
}
if(delf.rchild==p&&p.lchild==null&&p.rchild==null)
{
delf.rchild=null;
} else
{
if(p.lchild!=null&&p.rchild==null)
{
this.bst=p.lchild;
}
if(p.rchild!=null&&p.lchild==null)
{
this.bst=p.rchild;
}
if(p.lchild==null&&p.rchild==null)
{
this.bst=null;

}
}
if(p.lchild!=null&&p.rchild!=null)
{
bnodetp q=p;
bnodetp s=p.lchild;
while(s.rchild!=null)
{
q=s;
s=s.rchild;
}
p.key=s.key;
if(q!=p)
{
q.rchild=s.rchild;
}
else
{
q.lchild=s.lchild;
}
}
}class bnodetp {
int key;
bnodetp lchild,rchild; public bnodetp()
{
}}

解决方案 »

  1.   

    我以前开发时曾经将数据库信息挂在一棵树上(遍历),用的是递归函数,你先看看。/**
     * Title:
     * Description:
     * Copyright:    Copyright (c) 2002
     * Company:      fanchina
     * @author:      liwei
     * @Create date: 2002/02/21
     * @version 1.0
     */public class JtreeEvents extends JApplet
    {
           private String sParent;//param from jsp
           private String sMemberID;//param from jsp
           private String sBflag;//param from jsp
           private int iMaxNumber;//param from jsp
           private String sParentArray[];
           private String sMemberIDArray[];
           private String sBflagArray[];
           private String sMaxNumber;
           JTree tree;
           JTextField jtf;       public JtreeEvents() {
            getRootPane().putClientProperty("defeatSystemEventQueueCheck",
                                            Boolean.TRUE);
           }
           public void init()
           {
                int i=0;
                try
                {                  sParent=getParameter("sParent").trim() ;
                      sMemberID=getParameter("sMemberID").trim() ;
                      sBflag=getParameter("sBflag").trim() ;
                      sMaxNumber=getParameter("sMaxNumber").trim() ;                  iMaxNumber=Integer.parseInt(sMaxNumber);
                      sParentArray=new String[iMaxNumber];
                      sMemberIDArray=new String[iMaxNumber];
                      sBflagArray=new String[iMaxNumber];                  SetArray(sParentArray);
                      SetArray(sMemberIDArray);
                      SetArray(sBflagArray);                  StringTokenizer st;
                      st=new StringTokenizer(sParent,",");
                      while(st.hasMoreTokens() && i<iMaxNumber)
                           sParentArray[i++]=st.nextToken().trim();
                      st=new StringTokenizer(sMemberID,",");
                      i=0;
                      while(st.hasMoreTokens() &&i<iMaxNumber)
                           sMemberIDArray[i++]=st.nextToken().trim();
                      st=new StringTokenizer(sBflag,",");
                      i=0;
                      while(st.hasMoreTokens() &&i<iMaxNumber)
                           sBflagArray[i++]=st.nextToken().trim();                  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());                  Container contentPane=getContentPane();
                      contentPane.setLayout(new BorderLayout());                  DefaultMutableTreeNode top = new DefaultMutableTreeNode(sMemberIDArray[0]+":"+sBflagArray[0]);
                      SpreadNode(sMemberIDArray[0],top);                  tree = new JTree(top);                  tree.setCellRenderer(new myCellRenderer());                  int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
                      int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;                  JScrollPane jsp =new JScrollPane(tree,v,h);                  contentPane.add(jsp,BorderLayout.CENTER);                  JButton PersonalInformation = new JButton("PersonalInformation");                  JPanel PerPane=new JPanel();
                      PerPane.setBackground(Color.blue) ;
                      PerPane.setLayout(new BorderLayout()) ;
                      PerPane.add(PersonalInformation,BorderLayout.CENTER);                  contentPane.add(PerPane,BorderLayout.SOUTH);                  PersonalInformation.addActionListener(new ActionListener()
                      {
                           public void actionPerformed(ActionEvent ae)
                           {
                                  PersonalInformation();
                           }
                      }
                      );                  tree.addMouseListener(new MouseAdapter()
                      {
                           public void mouseClicked(MouseEvent me)
                           {
                                  doMouseClicked(me);
                           }
                      }
                      );
                      }
                      catch(Exception e)
                      {
                      }       }
      

  2.   

    接上面 
    void SpreadNode(String l_sMemberID,DefaultMutableTreeNode l_tNode)
           {
                for(int i=1;i<iMaxNumber;i++)
                {
                     if(sParentArray[i].compareTo(l_sMemberID)==0 )
                     {
                          DefaultMutableTreeNode child = new DefaultMutableTreeNode(sMemberIDArray[i]+":"+sBflagArray[i]);
                          l_tNode.add(child);
                          SpreadNode(sMemberIDArray[i],child);
                     }            }       }       void PersonalInformation()
           {
                int ifirst,ilast;
                String slink;
                String sTemp;
                try
                {
                     TreePath tp = tree.getSelectionPath();
                     if (tp!=null)
                     {
                          sTemp=tp.toString() ;
                          ifirst=sTemp.indexOf ("[");
                          ilast=sTemp.lastIndexOf("]");
                          slink=sTemp.substring(ifirst+1,ilast);
                          ilast=slink.lastIndexOf(",");
                          slink=slink.substring(ilast+1);
                          ilast=slink.lastIndexOf(":") ;
                          slink=slink.substring(0,ilast) ;
                          slink=slink.trim();                      AppletContext ac=getAppletContext();
                          URL url=getCodeBase();
                          URL u=new URL(url.toString()+"info.jsp?txtMemberID="+slink);
                          ac.showDocument(u,"_blank");
                     }
                }
                catch(Exception e)
                {
                }
           }       //after clicking ,the node is added to the clicked node
           void doMouseClicked(MouseEvent me)
           {
                /*int ifirst,ilast;
                String slink;
                String sTemp;
                try
                {
                     TreePath selectionPath = tree.getSelectionPath();
                     if (selectionPath!=null)
                     {
                          sTemp=selectionPath.toString() ;
                          ifirst=sTemp.indexOf ("[");
                          ilast=sTemp.lastIndexOf("]");
                          slink=sTemp.substring(ifirst+1,ilast);
                          ilast=slink.lastIndexOf(",");
                          slink=slink.substring(ilast+1);
                          ilast=slink.lastIndexOf(":") ;
                          slink=slink.substring(0,ilast) ;
                          slink=slink.trim();                      DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent() ;
                          if(selectedNode.isLeaf() )
                          {
                                for(int i=1;i<iMaxNumber;i++)
                                {
                                     if(sParentArray[i].compareTo(slink)==0)
                                     {
                                           ((DefaultTreeModel)tree.getModel()).insertNodeInto(new DefaultMutableTreeNode(sMemberIDArray[i]+":"+sBflagArray[i]),selectedNode,selectedNode.getChildCount() );
                                     }
                                }
                          }                 }            }
                catch(Exception e)
                {
                }*/
           }       void SetArray(String sArray[])
           {
                  for(int i=0;i<sArray.length;i++)
                  {
                       sArray[i] = "";
                  }
           }       class myCellRenderer extends JLabel implements TreeCellRenderer
           {
                 myCellRenderer(){setOpaque(true);}             public java.awt.Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus)
                 {
                        try
                        {
                             StringBuffer text=new StringBuffer();
                             if(expanded) text.append("*");
                             if(leaf) text.append("*");
                           //  if(hasFocus) text.append("H:");                       //  text.append("["+row+"]"+"->");
                             text.append(value.toString());                         setBackground(selected?Color.blue:Color.white);
                             setForeground(selected?Color.white:Color.blue );                         setText(text.toString() );
                        }
                        catch(Exception e)
                        {
                        }
                        return this;
                 }
           }}