我有一個只有兩個欄位的樹實作:
public class Tree {
private final String name;
private final List<Tree> children;
public Tree(String name) {
this.name = name;
this.children = new ArrayList<>();
}
如何使用遞回實作 add 方法?此方法通過節點的名稱將新節點插入到當前樹中。
public void add(Tree newNode, String parentName) {
if (parentName.equals(this.name)) {
this.children.add(newNode);
}
}
uj5u.com熱心網友回復:
public class Tree {
private String name;
private List<Tree> children;
private Tree(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public boolean add(Tree newNode, String parentName) {
if (name.equals(parentName)) {
children.add(newNode);
return true;
}
for (Tree child : children) {
if (child.add(newNode, parentName)) {
return true;
}
}
return false;
}
public String output(int level) {
StringBuilder buff = new StringBuilder();
if (level > 0 ) {
buff.append('|');
}
for (int i = 0; i < level; i ) {
buff.append("---");
}
buff.append(name).append(System.lineSeparator());
for (Tree child : children) {
buff.append(child.output(level 1));
}
return buff.toString();
}
public static void main(String [] args) {
Tree tree = new Tree("A");
tree.add(new Tree("B"), "A");
tree.add(new Tree("C"), "B");
tree.add(new Tree("1"), "C");
tree.add(new Tree("2"), "B");
System.out.println(tree.output(0));
}
}
uj5u.com熱心網友回復:
我假設這是你想要的:
root
|- node1
| |- node2
|
|- node3
添加node4到node2將導致:
root
|- node1
| |- node2
| | |- node4
|
|- node3
為此,您必須實施Breadth First Searchor Depth First Search。兩者都適用于您的資料結構,因此我建議您使用谷歌搜索并了解它們是如何作業的!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407759.html
標籤:
