C++ 有序树二叉树表示中节点右子节点的计数

C++ 有序树二叉树表示中节点右子节点的计数,c++,binary-tree,ordered-tree,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没有孩子 在物理

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

                         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)。

您所描述的看起来像是以左-子-右兄弟模式表示的任意算术树。每个节点都有一个指向其最左边的子节点以及其右边的同级节点的指针

查找给定节点有多少子节点应该不会太困难。只需选取最左边的子级,然后计算您可以迭代到其右边同级的次数。在伪代码中,它看起来像这样:

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
}

根据定义,二叉树每个节点不能有超过2个子节点。你在问什么?我们对输入的格式一无所知。如果一个节点有一个左子节点,那么它的子节点就是这个左子节点,所有从这个左子节点开始的节点都是右子节点……这仍然不是一个二叉树。每个节点在物理表示中只能有两个子节点。如果一个节点有一个左子节点,则该节点上的每个右子节点也被视为一个子节点。在我的例子中,左边的子对象是B。B有一个右边的子对象是C。C有一个右边的子对象是D。所以在这个任务中,B、C和D是A的子对象。。。