Pointers 如何有效地设置数据层次结构/树中唯一子级的值(高级)

Pointers 如何有效地设置数据层次结构/树中唯一子级的值(高级),pointers,data-structures,tree,Pointers,Data Structures,Tree,我正在做一些个人研究,发现需要高效地修改(可能非常大)数据树中的数据。数据由简单的数据组成,只是一个整数,也可能是一个小对象。在解析树时,我需要修改所有类似的对象(但仅限于子树中的对象)。这有点难以解释,所以我添加了一个图像作为示例来帮助您 在上图中,字母表示数据的值(相同的字母表示相同的数据),括号中的数字是唯一的值,因此我可以引用它们 假设我正在解析树,我现在在节点2。我已确定需要修改“a”的值并将其更改为“g”,但我只想修改当前节点和所有子节点。(因此,2和9将变为“g”,而1和7仍为“

我正在做一些个人研究,发现需要高效地修改(可能非常大)数据树中的数据。数据由简单的数据组成,只是一个整数,也可能是一个小对象。在解析树时,我需要修改所有类似的对象(但仅限于子树中的对象)。这有点难以解释,所以我添加了一个图像作为示例来帮助您

在上图中,字母表示数据的值(相同的字母表示相同的数据),括号中的数字是唯一的值,因此我可以引用它们


假设我正在解析树,我现在在节点2。我已确定需要修改“a”的值并将其更改为“g”,但我只想修改当前节点和所有子节点。(因此,2和9将变为“g”,而1和7仍为“a”)。我可以递归搜索所有子级并手动更改,但树可能非常大。如果我想更改a的所有值,我可以简单地将数据存储为双指针,并更改指针指向的值。所以我的问题是,是否有任何已知的方法可以在可能恒定的时间内以我想要的方式修改数据?

我将在插入到树中时这样做

为节点创建一个类

class node
{
    node* dataParent;
    CustomType* value;
    // put regular tree pointers here
}
然后,在遍历时插入时,dataParent指向具有相同数据的最后一个父级。如果没有相同的父项,则该值将为null,并且该值将不为null。若它有一个相同的父项,那个么该值将为null,并且自定义父项中会有一些内容。不过,您的检索将不是常数时间,您必须遍历,直到值不为null

这是我能想到的最好的办法。我想至少是对数n。已经有一段时间了

一件事是插入将是昂贵的