1、现在很多人都使用“父—子结构+递归算法”来显示树型的层次结构,但是不得不说这是一种非常拙劣的方式,下面给大家一种简单方便的数据结构和算法,快速显示树型的层次结构:2、数据库结构例如表“国家”可以是这样:编号 名称----------01 中国0101 吉林省010101 长春市010102 吉林市0102 江苏省010201 南京市010202 常州市02 美国0201 密歇根州020101 底特律市0202 华盛顿州020201 温哥华市020202 西雅图市03 澳大利亚3、在 TreeView 中显示结构procedure CreateTree;const ID_DEPT = 2;var nLevel: Integer; pNodes: array[ 0..1023] of TTreeNode; lpID, lpName: string;begin ADODataSet1.Close; ADODataSet1.CommandText := 'SELECT * FROM [国家] ORDER BY [编号]'; ADODataSet1.Open; pNodes[0] := nil; TreeView1.Items.Clear; with ADODataSet1.Recordset do while not Eof do begin lpID := Fields['编号'].Value; lpName := Fields['名称'].Value; nLevel := Length(lpID) div ID_DEPT; pNodes[nLevel] := TreeView1.Items.AddChild(pNodes[nLevel - 1], lpName); MoveNext; end;end;4、短短 20 行,一次读取数据。有人可能问为什么把 pNodes 的大小设成 1024?你也可以设成 10000,随你便,不过 TreeView 如果有那么多节点早死机了。 0..1023] of TTreeNode; lpID, lpName: string;begin ADODataSet1.Close; ADODataSet1.CommandText := 'SELECT * FROM [国家] ORDER BY [编号]'; ADODataSet1.Open; pNodes[0] := nil; TreeView1.Items.Clear; with ADODataSet1.Recordset do while not Eof do begin lpID := Fields['编号'].Value; lpName := Fields['名称'].Value; nLevel := Length(lpID) div ID_DEPT; pNodes[nLevel] := TreeView1.Items.AddChild(pNodes[nLevel - 1], lpName); MoveNext; end;end;4、短短 20 行,一次读取数据。有人可能问为什么把 pNodes 的大小设成 1024?你也可以设成 10000,随你便,不过 TreeView 如果有那么多节点早死机了。