📜  一元树的每个节点的子树中的叶节点数(1)

📅  最后修改于: 2023-12-03 14:48:45.991000             🧑  作者: Mango

一元树的每个节点的子树中的叶节点数

在计算机科学和数据结构中,一元树(Unary Tree)是一种树形结构,每个节点最多只有一个子节点。一元树的每个节点的子树中的叶节点数是指该节点所有子树中叶节点的数量。本文介绍了如何计算一元树每个节点的子树中的叶节点数,并给出了相应的代码示例。

计算算法

为了计算一元树每个节点的子树中的叶节点数,可以使用递归算法。从根节点开始,递归地遍历每个节点,对于每个节点,如果其子节点存在,则递归计算该子节点的子树中的叶节点数,并将结果累加到当前节点的叶节点数中。如果该节点没有子节点,则叶节点数为1。

以下是计算算法的伪代码表示:

function countLeafNodes(node):
    if node is null:
        return 0
    
    if node has no child:
        return 1
    
    leafCount = 0
    for each child in node.children:
        leafCount += countLeafNodes(child)
    
    return leafCount
示例代码

下面是使用Java语言实现的示例代码:

class TreeNode {
    private int val;
    private TreeNode child;

    // 构造函数
    public TreeNode(int val) {
        this.val = val;
        this.child = null;
    }

    // 获取子节点
    public TreeNode getChild() {
        return child;
    }

    // 设置子节点
    public void setChild(TreeNode child) {
        this.child = child;
    }
}

public class LeafNodeCount {
    public static int countLeafNodes(TreeNode node) {
        if (node == null) {
            return 0;
        }
        
        if (node.getChild() == null) {
            return 1;
        }
        
        int leafCount = 0;
        TreeNode child = node.getChild();
        while (child != null) {
            leafCount += countLeafNodes(child);
            child = child.getChild();
        }
        
        return leafCount;
    }
    
    public static void main(String[] args) {
        // 构建一元树
        TreeNode root = new TreeNode(1);
        TreeNode node1 = new TreeNode(2);
        TreeNode node2 = new TreeNode(3);
        TreeNode node3 = new TreeNode(4);
        
        root.setChild(node1);
        node1.setChild(node2);
        node2.setChild(node3);
        
        // 计算叶节点数
        int leafCount = countLeafNodes(root);
        System.out.println("Leaf node count: " + leafCount);
    }
}
结果

以上示例中的一元树包含4个节点,其中只有节点4是叶节点。运行示例代码后,输出结果为:

Leaf node count: 1

这表明一元树的根节点的子树中有1个叶节点。