gpt4 book ai didi

java - 需要我的树(n 叉树)的搜索方法

转载 作者:行者123 更新时间:2023-12-04 05:40:43 26 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

4年前关闭。




Improve this question




我已经为家谱写了这个树类

现在我需要一种搜索​​方法来在我的树中找到一个节点

它是一个 n 叉树,每个节点可以有 0 到 n 个 child

搜索方法可以搜索一个节点或两个名字,包括节点名和他/她的父亲名

请帮助我

public class FamilyNode {
public String name;
public String sex;
public FamilyNode Father;
public FamilyNode Mother;
public FamilyNode Spouse=null;
public String status="alive";
public int population;
public ArrayList<FamilyNode> children=new ArrayList<FamilyNode>() ;


public FamilyNode(String name1,String sex1){
this.name=name1;
this.sex=sex1;
this.population=this.children.size()+1;
}
public void SetParents(FamilyNode father,FamilyNode mother){
this.Father=father;
this.Mother=mother;
}
public void SetHW(FamilyNode HW){
this.Spouse=HW;
}
public void AddChild(FamilyNode child){
child.SetParents(this.Father, this.Spouse);
this.children.add(child);
this.Spouse.children.add(child);
}

public int Number (){
int number_of_descendants = this.population;
if(this.Spouse!=null) number_of_descendants++;
for(int index = 0; index < this.children.size(); index++)
number_of_descendants = number_of_descendants+ this.children.get(index).Number();
return number_of_descendants;
}

}

最佳答案

看看树遍历算法。此 article很好地涵盖了它们(使用递归和出队)
这是遍历树的一种方法

public class FamilyNode {
// ...
// ...
public void traverseNode(){
if(name.equals("NameWeAreLookingFor")){
// We found a node named "NameWeAreLookingFor"
// return here if your are not interested in visiting children
}
for(FamilyNode child : node.children){
child.traverseNode();
}
}
}

要遍历所有树,请执行以下操作:
FamilyNode root = ...;
root.traverseNode();

请注意,此方法使用递归。如果您的树非常大,那么我建议您改用队列,因为递归可能会导致 StackOverFlow 异常。

关于java - 需要我的树(n 叉树)的搜索方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11275817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com