delphi 树tree递归求差,该怎么处理
delphi 树tree递归求差
数据库结构如下:
id parentid,name,money,totalmoney,submoney
0,0,根节点,0,15000,0
1,0,张山,1000,5000,0
2,0,张好,2000,7000,0
3,0,王五,3000,3000,0
4,1,黎明,4000,4000,0
5,2,老刘,5000,5000,0
通过数据库加载到tree
现在想反向计算submoney.
submoney 是当前节点的totalmoney 减去下面所有层次的money.
并且要去掉当前下级节点的money最大值。
我这两种写法都好像有错,请大伙帮忙看看
------解决方案--------------------
数据库结构如下:
id parentid,name,money,totalmoney,submoney
0,0,根节点,0,15000,0
1,0,张山,1000,5000,0
2,0,张好,2000,7000,0
3,0,王五,3000,3000,0
4,1,黎明,4000,4000,0
5,2,老刘,5000,5000,0
通过数据库加载到tree
现在想反向计算submoney.
submoney 是当前节点的totalmoney 减去下面所有层次的money.
并且要去掉当前下级节点的money最大值。
- Delphi(Pascal) code
type tmydata = record id:integer; parentid:integer; name:string; money:double; totalmoney:double; submoney:double; resume:boolean; end; pmydata = ^tmydata; function submoney(p:tTreenode):double; var i:integer; d:pcustdata; begin d:=pcustdata(p.data); if p.Count <1 then begin d.submoney := 0; //=0 result := d.money; d.resum:=false; exit; end; result := d.money; for i:=0 to p.count -1 do result := result + submoney(p.Item[i]); //全部加起来以后用总数去减 d.submoney := d.totalmoney + d.money - result; d.resum:=false; end; //我写的这个没有考虑下级节点的最大值。 //另外一种。 function submoney(p:tTreenode):double; var i:integer; d:pcustdata; begin d:=pcustdata(p.data); if p.Count <1 then begin d.submoney := 0; //=0 result := d.money; d.resum:=false; exit; end; result := d.submoney; for i:=0 to p.count -1 do result := result - submoney(p.Item[i]);//这样减好像只是得到了一层节点的数据,并且减去的数是已经减了之后的数 d.submoney := result; d.resum:=false; end;
我这两种写法都好像有错,请大伙帮忙看看
------解决方案--------------------
- Delphi(Pascal) code
function submoney(p:tTreenode):double; var i:integer; d:pcustdata; begin d:=pcustdata(p.data); if p.Count <1 then begin d.submoney := 0; //=0 result := d.money; exit; end; result := d.money; for i:=0 to p.count -1 do begin if pcustdata(p.item[i]).ismax=false then result := result + submoney(p.Item[i]); end; d.submoney := d.totalmoney + d.money - result; d.resum:=false; end;