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最大值。
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;