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

计算节点在 BST 中是否有任何子节点

刘安志
2023-03-14

我遇到了一个问题,我知道如何计算树中的所有节点,像这样返回 1 个右子(树-

static int rightchild(const treeNode* tree){

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

    if(tree->right !=NULL){
        return 1 + rightchild(tree->right) + rightchild(tree->left);
    }
    else {
        return rightchild(tree->left);
    }

}

static int leftchild(const treeNode* tree){

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

    if(tree->left != NULL){
        return 1 + leftchild(tree->right) + leftchild(tree->left);
    }
    else {
        return leftchild(tree->right);
    }

}

希望我走在正确的道路上,我只是错过了一些东西,我将两个函数的结果结合起来,但它总是不准确的。


共有2个答案

澹台胜
2023-03-14

MikeCAT的答案是完全正确的,但我想给出另一个观点:计算树中的所有节点,然后从中减去1以计算根。

static int countNodes (treeNode* root) {
    if (root == NULL) return 0;
    return (1 + countNodes (root->left) + countNodes (root->right));
}

static int countChildren (treeNode * root) {
    if (root == NULL) return 0;
    return countNodes (root) - 1;
}
盛承
2023-03-14

您应该计算当前节点中的子节点数,并将子节点的子节点数之和相加。

static int countchild(const treeNode* tree) {
    int childrenNum = 0;
    if (tree == NULL) {
        return 0;
    }
    if (tree->left != NULL) {
        /* this node has a child in left + add the number of children in the left subtree */
        childrenNum += 1 + countchild(tree->left);
    }
    if (tree->right != NULL) {
        /* this node has a child in right + add the number of children in the right subtree */
        childrenNum += 1 + countchild(tree->right);
    }
    return childrenNum;
}
 类似资料:
  • 计算节点 需要额外启用 l3_agent(dvr 模式),以及 metadata agent。 其实,跟传统情况下的网络节点十分类似。每个东西向路由器有自己的命名空间,负责跨子网的转发。另外,多一个 floating 路由器,专门负责经由 floating 地址的南北向转发。 东西流量 如上图所示,租户两个子网,红色和绿色,分别有 vm1 和 vm2,位于节点 cn1 和 cn2 上。 vm1 访

  • 计算节点 主要包括两个网桥:集成网桥 br-int 和 隧道网桥 br-tun。 $ sudo ovs-vsctl show225f3eb5-6059-4063-99c3-8666915c9c55 Bridge br-int fail_mode: secure Port br-int Interface br-int

  • 计算节点 查看网桥信息,主要包括两个网桥:br-int和br-eth1: [root@Compute ~]# ovs-vsctl showf758a8b8-2fd0-4a47-ab2d-c49d48304f82 Bridge "br-eth1" Port "phy-br-eth1" Interface "phy-br-eth1" Port "

  • 计算节点 以抽象系统架构的图表为例,Compute 节点上包括两台虚拟机 VM1 和 VM2,分别经过一个网桥(如 qbr-XXX)连接到 br-int 网桥上。br-int 网桥再经过 br-tun 网桥(物理网络是 GRE 实现)连接到物理主机外部网络。 对于物理网络通过 vlan 来隔离的情况,则一般会存在一个 br-eth 网桥,替代 br-tun 网桥。 qbr 在 VM1 中,虚拟机的

  • 当我们进行BST时,我明白一个主要的关键点是左孩子必须小于右孩子。当我们创建一个BST并有一个根节点时,当您在该根节点的左侧遍历并到达其右子节点时,右子节点是否也大于根节点? 如果我们在根节点的右侧遍历,也是如此。如果我们在根节点的右侧遍历,我们会遇到这样一种情况吗,即我们击中了一个小于根节点值的左子节点?

  • 我很难找出平均和最坏情况下的时间复杂度。因此,我使用以下逻辑删除了BST节点 删除二元搜索树中的节点时,有3种情况 那么,如何计算总体平均时间复杂度和最差时间复杂度??