我需要帮助解决这个问题。 示例树:
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)。
答案 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
}