在有序树的二叉树表示中计算节点的右子节点

时间:2013-06-11 19:03:07

标签: c++ binary-tree ordered-tree

我需要帮助解决这个问题。 示例树:

                         A
                        /
                       B-C-D
                           /
                           E-F-G

我有一个表示有序树的二叉树,我必须计算每个节点的子节点数,并将该数字放在相应的节点中。

A有三个孩子(B,C,D),D有三个孩子(E,F,G).B,C,E,F,G零孩子。

每个节点只能有两个物理(二进制)表示的子节点。如果一个节点有一个左子节点,那么来自该节点的每个右子节点也被视为子节点。在我的例子中,左边的孩子是B.B有一个右边的孩子C.C有一个右边的孩子D.所以B,C和D是这个任务中A的孩子..

在程序结束时,节点中的数据应为A(3),B(0),C(0),D(3),E(0),F(0),G(0)。

1 个答案:

答案 0 :(得分:0)

您所描述的内容似乎是以左子右兄弟模式表示的任意arity树。每个节点都有一个指向其最左边的子节点及其右边兄弟的指针。

查找给定节点有多少个孩子应该不会太困难。只需占用最左边的孩子,然后计算你可以迭代到其正确兄弟的次数。在伪代码中,它看起来像这样:

def Node {
    Node* left_child
    Node* right_sibling
}

numChildren(Node n) {
    num = 0
    next = n.left_child
    while (next exists)
        num = num + 1
        next = next.right_sibling
    return num
}