问:在一个在多叉树中搜索指定数据的算法(100分)

  • 主题发起人 主题发起人 知秋
  • 开始时间 开始时间

知秋

Unregistered / Unconfirmed
GUEST, unregistred user!
已经建好了一棵多叉树,每个节点包含若干个子节点,同一个父节点下的前一个子节点和后一个子节点用pNext连接起来了。问:输入指定的节点数据信息,返回包含该数据的节点。
 
?不就是树的遍历吗 ,深度优先或者广度优先算法。。。用递归来写
如果不会。。。给出你的树节点结构 我帮你写个
 
我自己写的递归函数,但是有问题,你能在这个代码基础上批评指正吗?多谢!
private TreeNode FindNode(TreeNode node, int iId)
{
TreeNode newNode = null;
if(node.getId() == iId)
{
return node;
}

if ( node.getChildren() != null ) // 如果有子节点,
{
newNode = node.FirstChild;
FindNode(newNode, iId);
// 进入子节点链表的第一个节点
}
if ( node.pNext != null ) // 如果有其他节点
{
newNode = node.pNext;
FindNode(newNode, iId);
// 进入下一个兄弟节点
}
return newNode;
}
 
。。。。。。。这个 C语法不熟 有个问题 既然你用了treeview 干吗还要自己写遍历?直接用treeview的items循环查找不就行了
 
还有 看你的代码 第一个if如果成立应该直接返回了吧,如果继续执行下面,前面的return node;就会被return newNode;代替
还有
if ( node.pNext != null ) // 如果有其他节点
{
newNode = node.pNext;
FindNode(newNode, iId);
// 进入下一个兄弟节点
既然是多叉树,也就是说同级节点不只是2个,所以这里应该用循环才对,而不应该只是一个if
 
用的语言是Java。
是的,应该以每一个节点的子节点作循环。已经解决了,代码如下。多谢hs-kill的指点。
private boolean bFlag = false;
private TreeNode reNode = null;
private TreeNode FindNode(TreeNode node, int iId)
{

if(node == null)
{
return null;
}
if (node.getId() == iId)
{
bFlag = true;
reNode = node;
}
else
{
if(node.getChildren() != null)
{
Vector vecChildren = node.getChildren();
for(int i = 0;
i < vecChildren.size();
i++)
{
TreeNode newNode = (TreeNode) vecChildren.get(i);
FindNode(newNode, iId);
if (bFlag == true)
{
return reNode;
}
}
}
}
return reNode;
}
 
后退
顶部