我目前正在尝试实现一个树(不是二进制的,顺序不重要,不是定向的)数据结构。当一棵树的根与另一棵树的子节点相同时,我希望将树合并在一起
第一棵树的子树应该成为第二棵树的子树,第二棵树的子树与第一棵树的根相同。要合并的树可能更深。
我实现了树节点。java
像这样:
public class TreeNode {
private TreeNode parent;
private List<TreeNode> children;
private IP vertexName;
private int height;
//This creates the root vertex, of the Tree.
public TreeNode(IP vertexName) {
this.vertexName = vertexName;
this.parent = null;
this.height = 0;
this.children = new ArrayList<>();
}
//This is for creating other members of a tree besides the root, the children vertices.
public TreeNode(TreeNode parentTreeNode, IP vertexName) {
this.children = new ArrayList<>();
this.parent = parentTreeNode;
this.height = (parentTreeNode.getHeight() + 1);
this.vertexName = vertexName;
parentTreeNode.children.add(this);
}
public void addChildren(List<IP> verteciesIPs) throws NotATreeException {
areValidChildren(verteciesIPs);
for (IP ip:verteciesIPs) {
TreeNode treeNode = new TreeNode(ip);
treeNode.setParent(this);
treeNode.setHeight(this.getHeight() + 1);
this.children.add(treeNode);
}
}
public void addChild(TreeNode treeNodeChildren) {
treeNodeChildren.setParent(this);
treeNodeChildren.setHeight(this.getHeight() + 1);
this.children.add(treeNodeChildren);
}
public void areValidChildren(final List<IP> verteciesIPs) throws NotATreeException {
if (hasDuplicateChildren(verteciesIPs)) {
throw new NotATreeException("Duplicate entries");
}
然后我有一个树列表list
我希望有人能帮我。
为了简化起见,我没有发布整个代码。
我尝试迭代
List
匿名用户
您可以实现一个函数来检查树是否包含()
给定的数字,然后您可以在每次要添加新值时调用该函数。代码>继续也可以添加数字作为要添加的节点的子节点。您可以尝试查看DFS或BFS,因为您的树更像一个图形而不是实际的树。
假设给定一组树ST,每棵树的每个顶点都被标记。另外还给出了另一棵树T(也有顶点标签)。问题是如何找到ST的哪些树可以从T的根开始跨越树T,从而使生成树T的顶点标签与T的顶点标签一致。请注意,T的每个顶点的子节点要么完全覆盖,要么根本不覆盖——不允许部分覆盖子节点。换句话说:给定一棵树和以下过程:选择一个顶点,删除该顶点以下的所有顶点和边(除了顶点本身)。找到ST的那些树,这样每棵树都是用一系列应用
我有一个很严重的问题,就是在一棵树中重复搜索子树。 我试过了,但是。。。 似乎没有正确的形式。containsTree函数在找到与另一个节点不同的节点时停止搜索。 下面是两棵树的例子。 在这种情况下,当函数比较右边的子树和左边的子树时,当find等于父节点但它有不同的子节点时,它会停止搜索。我需要函数不要停止搜索,而是抛出这一点,搜索所有其他子节点及其子树。
我必须使用绘制一个可呈现的树。你可以在图片中看到 应满足此链接中陈述的所有原则。 原则是: 原则1:树的边不应该互相交叉。 原则2:相同深度的所有节点应绘制在同一水平线上。这有助于清除树的结构。 原则3:树木的绘制应尽可能窄。 原则4:父母应以子女为中心。 原则5:子树无论位于树中的哪个位置,都应以相同的方式绘制。 原则 6:父节点的子节点应均匀分布。 如何计算每个节点的X、Y位置?
我正在尝试打印一棵树,问题是我找不到任何其他方法,只能像这样打印它: 但有没有办法像这样打印它: 这是我的代码: 在这里,我为树节点创建了一个类,我知道代码很糟糕,但我仍然是初学者,我将在未来改进它。我使用列表来存储子列表和链表来对兄弟姐妹进行排序,因为它稍后在尝试打印实际树时会很有用。 我打印树的方式是这样的:打印当前节点,如果当前节点有任何子节点,则转到子节点,如果没有,则转到当前节点的父节点
假设我在一棵树中有一个节点,我如何获得所有的叶节点,它们的祖先是这个节点?我这样定义了TreeNode:
我正在努力想出一种算法,它允许我绘制一个像数据结构一样的树,其中每个节点可以有0..n个子节点。对我来说,问题是,我不知道我必须放置节点多远,以便子节点不会重叠。 在本例中,“d”是“b”的子级,“g”是“e”的子,当我在给定树的总宽度的情况下,将子级均匀分布在其父级上方时,它们在x轴上重叠。 节点不以任何方式排序。所以它实际上更像一个必须看起来像树的图。