如何在C ++中获取非二叉树中特定节点的所有子节点

时间:2016-09-14 09:52:20

标签: c++ algorithm

我被卡住了,因为我不知道如何在非二叉树中获取特定节点的所有子节点。

例如,根节点是A.

A = {B,C}

B = {D,E,F}

E = {G}

我希望得到所有子节点B = {D,E,F,G}

我该怎么办?非常感谢你。

2 个答案:

答案 0 :(得分:3)

您可以递归获取子节点。

首先,遍历树以获取初始节点B。之后,应用此递归伪代码:

void get_children(Node *node, list<Node*>& res) {
    for each child in node->children {
        res.add(child);
        get_children(child, res);
    }
}

B传递给get_children,以及一个空的节点列表。该函数将所有子项添加到传递给它的列表中。确保您通过引用传递列表;否则,该功能不会修改您的列表。

答案 1 :(得分:2)

假设您的树是定向的,一个简单的图遍历算法(BFS或DFS)将为您完成工作。

Breadth-First-Search(Graph, startNode):

    create empty queue Q      
    Q.enqueue(startNode)                      
    while Q is not empty:           
        current = Q.dequeue()
        for each node n that is adjacent to current:
            print n
            Q.enqueue(n)