java - Java中的树比较算法
问题描述
我正在寻找一种算法来比较两棵树。
我在Java中有这个类
public class TreeNodeDSP {
TreeNodeDSP parent;
List<TreeNodeDSP> children;
NodeDSP value;
public TreeNodeDSP(TreeNodeDSP parent) {
this.parent = parent;
children = new ArrayList<>();
}
public TreeNodeDSP(TreeNodeDSP parent, NodeDSP value) {
this.parent = parent;
children = new ArrayList<>();
this.value = value;
}
public void addChild(TreeNodeDSP node) {
if (node != null && node.getValue() != null) {
if (children.stream().noneMatch(child -> Objects.equals(child.getValue(), node.getValue()))) {
children.add(node);
}
}
}
public TreeNodeDSP getParent() {
return parent;
}
public void cleanChildren() {
children = new ArrayList<>();
}
public int getChildrenCount() {
return children.size();
}
public TreeNodeDSP getChildrenAt(int position) {
if (children.size() > position && position > -1) {
return children.get(position);
}
return null;
}
public List<TreeNodeDSP> getChildren() {
return children;
}
public NodeDSP getValue() {
return value;
}
public boolean isLeaf() {
return children.isEmpty();
}
}
我认为NodeDSP
不需要类的代码。
现在,我有一个算法来填充我的树(TreeNodeDSP
)并面临基于自动填充树(计算一些条件)执行操作的问题,
我手动填充我的树并工作。
我需要发现我的树(手动填充和自动)在其节点(内部)中有什么区别,不仅说是不同的树。当某些节点/叶子不同时,我需要打印其内容。
但是,我不知道如何从比较算法开始。
解决方案
推荐阅读
- mysql - 无法对 JDBC 目标执行架构管理
- javascript - 尝试通过 AJAX 提交 rails 表单时出现 400 错误
- c++ - 如何使用 cpp 在 unordered_map 中分配 lambda 函数?
- linq - 当我从 Azure 函数而不是控制台应用程序运行 LINQ 查询时失败
- apache-spark - 修复 Spark 结构化流中的检查点
- python - 如何按两个字段分组并按日期时间排序?
- mod-rewrite - RewriteRule 否定(NOT)不起作用
- ios - 如何持久化 tableview 行?
- python - 如何使数据类更好地与 __slots__ 一起工作?
- c# - 在 C# mysql 中读取 mediumblob