请提供树型结构算法,父子码,高分相送(300分)

  • 主题发起人 主题发起人 babysheep
  • 开始时间 开始时间
B

babysheep

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库结构是
节点id :id
父节点id:pid
节点名称:mc
父子码编码方式:
如:节点是 11 则父是1
节点是21 则父是2
节点是112 则父是11
以此类推
请根据这个库结构提供一个算法,生成一棵树型。如果能提供java程序的算法,再加200分
 
如果可以DELPHI 就很容易了 JAVA我不懂
 
现写了一个,算法不是很好,手头没有数据结构的书
你可以试着用数据结构书上的算法
把NodeTree.buildTree()这个方法整合到NodeTree的构造函数里面
--------------------------------
Node.java
--------------------------------

public class Node {
private String ID;
private String fatherID;
private String name;
private java.util.ArrayList sons;
public Node() {
}
public Node(String ID,String fatherID,String name){
this.ID=ID;
this.fatherID=fatherID;
this.name=name;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getFatherID() {
return fatherID;
}
public void setFatherID(String fatherID) {
this.fatherID = fatherID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public java.util.ArrayList getSons() {
return sons;
}
public void setSons(java.util.ArrayList sons) {
this.sons = sons;
}
}
--------------------------------------------
NodeTree.java
--------------------------------------------
import java.util.*;
public class NodeTree {
private Hashtable nodeTable=new Hashtable();
private Node root;
public NodeTree() {
//pub all the elements into the nodeTable
//the ID as the key of the table
}
void buildTree(){
Enumeration enu=nodeTable.elements();
while(enu.hasMoreElements()){
Node node=(Node)enu.nextElement();
if(node.getFatherID()!=null){
((Node)nodeTable.get(node.getFatherID())).getSons().add(node);
}else
{
root=node;
}
}
}
public Node getRoot() {
return root;
}
}
 
这是左右手以前写的一个,功能实现了,但节点多了效率不太好。
procedure AddSectionIntoView(SectionView: TTreeView1;
ImageIndex: integer;
ParentNode: TTreeNode;
OwnerForm: TForm;
ParentID:string);
var
TempQuery: TADOQuery;
CurrNode: TTreeNode;
begin
TempQuery := TADOQuery.Create(OwnerForm);
try
TempQuery.Connection := FormMain.ADOConnection1;
TempQuery.Close;
TempQuery.SQL.Text := 'select * from SectionInfo where ParentID=:ParentID';
TempQuery.Parameters[0].Value := ParentID;
TempQuery.Open;
if TempQuery.RecordCount > 0 then
begin
TempQuery.First;
while not TempQuery.Eofdo
begin
CurrNode := SectionView.Items.AddChild(ParentNode,TempQuery.FieldValues['SectionName']);
CurrNode.ImageIndex := ImageIndex;
CurrNode.SelectedIndex := ImageIndex;
AddSectionIntoView(SectionView,ImageIndex,CurrNode,OwnerForm,TempQuery.FieldValues['SectionID']);
TempQuery.Next;
end;
end;
finally
TempQuery.Free;
end;
end;

 
DELPHI可以吗??
 
copy(vv,length(vv)-1,1) or copy(vv,1,length(vv)-1)
 
如果周末还没有结贴的话
周末帮你些一个哈
 
后退
顶部