开发者社区> 问答> 正文

完全二叉树的计算结点总数算法

/**
定义二叉树的结点如下
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
}; / 算法如下: int countNodes(struct TreeNode root) { if(root==NULL)//如果传进一棵空树 return 0; if(root->left==NULL)//如果传进一棵只有根结点的树木 return 1; if(root->right==NULL)//如果这颗树就只有一颗子树 return 2; return (countNodes(root->left)+countNodes(root->right)+1); } 该算法在OJ上面判断出错,说是算法时间超出限制,求解,这个算法错在哪里。

展开
收起
a123456678 2016-03-23 13:48:32 2055 0
1 条回答
写回答
取消 提交回答
  • int countNodes(struct TreeNode *root)
    {

    if(root!=NULL)
    {
    if(root->left==NULL&&root->right==NULL)//叶子节点

      return 1;

    else //其中至少一个子树不为空,那就意味着可能有多个节点。

      //总节点数是左子树节点数+右子树节点数+1(自身节点)
      return countNodes(root->left)+countNodes(root->right)+1;
    

    }else//如果为空,则说明不存在这个节点,故返回零。

    return 0;

    }

    您的算法有缺陷的,如楼上所述。
    if(root->left==NULL)//如果传进一棵只有根结点的树木 return 1; if(root->right==NULL)//如果这颗树就只有一颗子树 return 2;

    这两个if语句是不妥的。

    2019-07-17 19:10:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载