下面是一个遍历树(一般的树)的算法,对不对? ( 积分: 1 )

  • 主题发起人 主题发起人 mycwcgr_new
  • 开始时间 开始时间
M

mycwcgr_new

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是一个遍历树(一般的树)的算法,对不对?
下面是别人的一个遍历树(一般的树)的算法
procedure SetChildStates(Node: TTreeNode);
var
ChildNode:TTreeNode;
begin
if Node = nil then
Exit;
ChildNode:=Node.getFirstChild;
while ChildNode <>
nildo
begin
ChildNode.StateIndex:=Node.StateIndex;
UpdateRight(ChildNode.Data,ChildNode.StateIndex = ICON_CHECKED);

if ChildNode.HasChildren then

SetChildStates(ChildNode);
ChildNode:=Node.GetNextChild(ChildNode);
end;
end;

我认为应该是
procedure SetChildStates(Node: TTreeNode);
var
ChildNode:TTreeNode;
begin
if Node = nil then
Exit;
ChildNode:=Node.getFirstChild;
while ChildNode <>
nildo
begin
ChildNode.StateIndex:=Node.StateIndex;
UpdateRight(ChildNode.Data,ChildNode.StateIndex = ICON_CHECKED);


if ChildNode.HasChildren then
begin
SetChildStates(ChildNode);
end
else
begin
ChildNode:=Node.GetNextChild(ChildNode);
end;

end;
end;

我的想法对不对?还是这两种表示法是等效的?
 
下面是一个遍历树(一般的树)的算法,对不对?
下面是别人的一个遍历树(一般的树)的算法
procedure SetChildStates(Node: TTreeNode);
var
ChildNode:TTreeNode;
begin
if Node = nil then
Exit;
ChildNode:=Node.getFirstChild;
while ChildNode <>
nildo
begin
ChildNode.StateIndex:=Node.StateIndex;
UpdateRight(ChildNode.Data,ChildNode.StateIndex = ICON_CHECKED);

if ChildNode.HasChildren then

SetChildStates(ChildNode);
ChildNode:=Node.GetNextChild(ChildNode);
end;
end;

我认为应该是
procedure SetChildStates(Node: TTreeNode);
var
ChildNode:TTreeNode;
begin
if Node = nil then
Exit;
ChildNode:=Node.getFirstChild;
while ChildNode <>
nildo
begin
ChildNode.StateIndex:=Node.StateIndex;
UpdateRight(ChildNode.Data,ChildNode.StateIndex = ICON_CHECKED);


if ChildNode.HasChildren then
begin
SetChildStates(ChildNode);
end
else
begin
ChildNode:=Node.GetNextChild(ChildNode);
end;

end;
end;

我的想法对不对?还是这两种表示法是等效的?
 
这两种表示法当然不是等效的啊!!!
 
方法1在每次嵌套结束后将执行语句 ChildNode:=Node.GetNextChild(ChildNode)
方法2只有在ChildNode.HasChildren为false的时候才执行ChildNode:=Node.GetNextChild(ChildNode)
 
接受答案了.
 
后退
顶部