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

Counting right children of a node in binary tree representation of ordered tree

本文关键字:子节点 节点 表示 二叉树      更新时间:2023-10-16

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

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

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

A有三个子结点(B,C,D),D有三个子结点(E,F,G)。B,C,E,F,G没有子结点

每个节点在物理(二进制)表示中只能有两个子节点。如果一个节点有左子节点,那么从这个节点开始的每个右子节点都被认为是一个子节点。在我的例子中,A的左子结点是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
}