当前位置: 首页 > 知识库问答 >
问题:

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

刘修能
2023-03-14

我需要创建一个递归方法,将二叉查找树的根节点作为参数。这个递归方法将返回整个二叉查找树中内部节点总数的int值。

这就是我到目前为止所拥有的:

int countNrOfInnerNodes (Node node) {
    if(node == null) {
       return 0;
    }
    if (node.left != null && node.right != null){
       return 1;
    }
    return countNrOfInnerNodes(node.left)+countNrOfInnerNodes(node.right)
    }
 }

有没有更好的办法?我还坚持寻找迭代解。

共有1个答案

章承
2023-03-14

下面是修复的递归方法:

int countNrOfInnerNodes (Node node) {
    if(node == null) {
       return 0;
    }

    if (node.left == null && node.right == null) {
       // not an inner node !
       return 0;
    } else {
       // the number of inner nodes in the left sub-tree + the number of inner
       // nodes in the right sub-tree, plus 1 for this inner node
       return countNrOfInnerNodes(node.left) + countNrOfInnerNodes(node.right) + 1;
    }
}

下面是迭代方法:

int countNrOfInnerNodes(Node node) {
    if (node == null)
        return 0;

    Stack<Node> nodesToCheck = new Stack<Node>();

    nodesToCheck.push(node);
    int count = 0;

    while (!nodesToCheck.isEmpty()) {
        Node checkedNode = nodesToCheck.pop();
        boolean isInnerNode = false;

        if (node.left != null) {
            isInnerNode = true;
            nodesToCheck.push(node.left);
        }

        if (node.right != null) {
            isInnerNode = true;
            nodesToCheck.push(node.right);
        }

        if (isInnerNode)
            count++;
    }

    return count;
}
 类似资料:
  • 好的,我必须创建一个递归方法来计算树中的节点,我做到了(变量名是葡萄牙语的,对不起): arvbin是二叉树,esq和dir是对树分支的左右引用。 我以为这会奏效,但由于某种原因,当我尝试运行它时,它返回0。我使用了一些调试,我认为问题在于,当方法完成并返回到原始的非递归方法时,cardinalidade变量被设置为0。我不确定这是否是因为自动装箱会弄乱我的整数并将其转换为int,然后当我调用该方

  • 问题内容: 我想在非二叉树中搜索一个项目(任何节点都可以有n个孩子)并立即退出递归。所讨论的节点可以是任何节点,而不仅仅是叶子。 这是我的代码,但我没有完整的搜索。 nNode包含: (是孩子) 和数据对象。 问题答案: 探索第一个孩子后,您不应该退出。您不需要循环前面的语句。

  • 我坚持使用递归函数来查找二叉树中节点的深度,更具体地说,是在else条件中: 如果树是二叉搜索树,知道左子值总是低于父值,右子值总是高于父值,我可以添加一个If条件,这样如果节点x值低于根,我总是返回根- 当查看函数时,假设节点总是存在的,节点x永远不是根,并且在开始时传递的深度总是0。 如果树是二叉搜索:

  • 我读了一个算法来寻找二叉树中两个节点之间的距离。 这段代码在二叉树中找到(从根到给定节点的1个距离)。 我不明白的是,“x”有两个值,一个来自左子树,另一个来自右子树,它如何知道返回哪个值 例如,如果树类似于: 然后调用, 那么,在语句“”中,它如何返回正确的x值?

  • 我需要得到所有节点的x,y坐标,例如: X:使用顺序遍历访问节点之前已经访问的节点数 Y:节点从根开始的深度 例如对于节点15,x=5(15之前:已经访问过7, 8, 9, 10, 13),y=1(第二级) 树没有父指针 结果:x是错误的,y是正确的 打印: 结果: 我已经尝试过了(我认为这是不正确的,因为正确的子树遍历不计入节点) 结果是

  • 所以,我想做的是检查一个完整的二叉树叶子中的 int 是否比它的父叶大,并以此为标准让它与它的父叶不断改变位置,一直到根。问题是,当它必须与根进行比较和更改位置时,它会塞格福;如果我在那之前让循环停止,它工作得很好(我认为)。我在这里错过了一些明显的东西吗? 添加新叶子时,将发生以下情况。我省略了叶子实际添加到树中的部分,因为它工作正常并且很长。指针 p 指向循环开始之前插入的最后一个叶。根的父亲