在二叉树中计算具有特定数量的子节点的节点?

游戏迷

我从一本有关c ++的书中获得了这项具有挑战性的练习,但不确定如何解决此问题。我必须定义一个函数treeNodeCount()该函数返回二叉树中的节点数(很容易),我还必须定义一个重载函数,该函数需要一个int(0,1或2)来表示子代数目,并且函数应返回具有该特定数量的子代的节点。treeNodeCount都应该使用一个称为的函数nodeCount(elemType root)来对节点进行计数(因此,基本上所有的工作)。

挑战一说,我可以添加第二个参数,nodeCount参数将要计算的节点的子代数作为参数

第二个挑战说我们不能使用第二个参数(这是困难的部分)

我能够挑战一个,这就是我的想法:

template <class elemType>
int binaryTreeType<elemType>::nodeCount(nodeType<elemType> *p, int a ) const
{

    if (p == NULL){
        return 0;
    }

    else if (a == 0 && p->lLink == NULL && p->rLink == NULL){
        return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
    }
    else if (a == 1 && (p->lLink != NULL ^ p->rLink != NULL)){
        return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
    }
    else if (a == 2 && p->lLink != NULL && p->rLink != NULL){
        return 1 + nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
    }

    else if (a == -1){
        return nodeCount(p->lLink, a) + nodeCount(p->rLink, a) + 1;

}
    return nodeCount(p->lLink, a) + nodeCount(p->rLink, a);
}

template <class elemType>
int binaryTreeType<elemType>::treeNodeCount(int a) const{
    return nodeCount(root, a);
}

这似乎工作正常,但我坚信必须有更好的方法。虽然我无法进行挑战2,但我也不知道该怎么办(甚至有可能)

用户名

您可以通过实现一个函数来返回给定节点的子代数,从而简化逻辑并使其更加简单明了。

template <class elemType>
int nodeSize(nodeType<elemType>* node) const
{
    int count = 0;
    if (node->lLink)
        ++count;
    if (node->rLink)
        ++count;
    return count;
}

template <class elemType>
int binaryTreeType<elemType>::nodeCount(nodeType<elemType>* node, int count) const
{
    if (node)
    {
        if (nodeSize(node) == count || count == -1)
             return nodeCount(node->lLink, count) + nodeCount(node->rLink, count) + 1;
        return nodeCount(node->lLink, count) + nodeCount(node->rLink, count);
    }
    return 0;
}

对于第二个挑战,您需要一个堆栈来避免递归。

template <class elemType>
int binaryTreeType<elemType>::treeNodeCount(int count) const
{
    stack<nodeType<elemType>*> node_stack;
    node_stack.push(root);

    int num_matches = 0;
    while (!stack.empty())
    {
        nodeType<elemType>* node = node_stack.top();
        node_stack.pop();
        if (node)
        {
            if (nodeSize(node) == count || count == -1)
                ++num_matches;
            node_stack.push(node->lLink);
            node_stack.push(node->rLink);
        }
    }
    return num_matches;
}

编辑:修复了上述递归版本中的问题。感谢David Rodriguez指出这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在二叉树中对具有特定值的节点进行计数

来自分类Dev

在Prolog中计算二叉树中的零节点

来自分类Dev

在Prolog中计算二叉树中的零节点

来自分类Dev

如何在C ++中获取非二叉树中特定节点的所有子节点

来自分类Dev

计算二叉树内部节点

来自分类Dev

生成所有具有 n 个节点的二叉树 OCaml

来自分类Dev

对于具有n个节点的完整二叉树,叶节点有多少个节点?

来自分类Dev

获取特定级别的二叉树的所有节点

来自分类Dev

获取特定级别的二叉树的所有节点

来自分类Dev

递归计算二叉树中的内部节点(父节点)

来自分类Dev

给定一个二叉树和一个LCA,找到具有该LCA的节点对的数量?

来自分类Dev

二叉树。叶节点的顺序(遍历树)

来自分类Dev

节点为n的二叉树和BST的数量

来自分类Dev

验证给定级别的所有节点在二叉树中是否具有不同的值

来自分类Dev

检查二叉树的根中是否存储的数目大于所有子节点中的数目的函数

来自分类Dev

我如何在R Studio中绘制具有13个节点的二叉树

来自分类Dev

二叉树是否必须具有数字节点?二叉树可以有一个带有字符串值的节点吗?

来自分类Dev

二叉树,返回节点的父级

来自分类Dev

递归访问二叉树中的节点

来自分类Dev

二叉树将值插入节点。爪哇

来自分类Dev

在二叉树中查找节点的父级

来自分类Dev

Prolog中的二叉树计数节点

来自分类Dev

在二叉树的匹配位置替换树节点

来自分类Dev

如何找到二叉树中节点的位置?

来自分类Dev

C ++:使用加倍的节点复制二叉树

来自分类Dev

在二叉树中以相同深度链接节点

来自分类Dev

完整二叉树中的叶节点数

来自分类Dev

从边缘列表(节点对)构建二叉树

来自分类Dev

无法在二叉树中插入新节点

Related 相关文章

  1. 1

    在二叉树中对具有特定值的节点进行计数

  2. 2

    在Prolog中计算二叉树中的零节点

  3. 3

    在Prolog中计算二叉树中的零节点

  4. 4

    如何在C ++中获取非二叉树中特定节点的所有子节点

  5. 5

    计算二叉树内部节点

  6. 6

    生成所有具有 n 个节点的二叉树 OCaml

  7. 7

    对于具有n个节点的完整二叉树,叶节点有多少个节点?

  8. 8

    获取特定级别的二叉树的所有节点

  9. 9

    获取特定级别的二叉树的所有节点

  10. 10

    递归计算二叉树中的内部节点(父节点)

  11. 11

    给定一个二叉树和一个LCA,找到具有该LCA的节点对的数量?

  12. 12

    二叉树。叶节点的顺序(遍历树)

  13. 13

    节点为n的二叉树和BST的数量

  14. 14

    验证给定级别的所有节点在二叉树中是否具有不同的值

  15. 15

    检查二叉树的根中是否存储的数目大于所有子节点中的数目的函数

  16. 16

    我如何在R Studio中绘制具有13个节点的二叉树

  17. 17

    二叉树是否必须具有数字节点?二叉树可以有一个带有字符串值的节点吗?

  18. 18

    二叉树,返回节点的父级

  19. 19

    递归访问二叉树中的节点

  20. 20

    二叉树将值插入节点。爪哇

  21. 21

    在二叉树中查找节点的父级

  22. 22

    Prolog中的二叉树计数节点

  23. 23

    在二叉树的匹配位置替换树节点

  24. 24

    如何找到二叉树中节点的位置?

  25. 25

    C ++:使用加倍的节点复制二叉树

  26. 26

    在二叉树中以相同深度链接节点

  27. 27

    完整二叉树中的叶节点数

  28. 28

    从边缘列表(节点对)构建二叉树

  29. 29

    无法在二叉树中插入新节点

热门标签

归档