假设二叉树采用二叉链存储结构存储,试设计一个算法,计算一棵给定二叉树的所有单分支节点个数。

假设二叉树采用二叉链存储结构存储,试设计一个算法,计算一棵给定二叉树的所有单分支节点个数。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7501249
  • 这篇博客你也可以参考下:采用二叉链表存储表示,设计算法判断一个二叉树是否为完全二叉树。
  • 除此之外, 这篇博客: 理解一级指针,二级指针,指针和数组,指针数组中的 指针的类型决定了指针向前或者向后走一步有多大。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 您还可以看一下 刘欢老师的从前端到后台,开发一个完整功能的小程序课程中的 用户注册,登录界面制作(前端)小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      算法设计:

      首先,遍历二叉树的每个节点,如果该节点只有一个孩子节点且另一个节点为空,则该节点为单分支节点。

      具体实现:

      定义一个函数,传入二叉树的根节点指针,返回单分支节点的数量。在函数内部实现二叉树的前序遍历,当遍历到节点只有一个孩子节点时,判断该孩子节点是否为空,若为空则该节点为单分支节点。递归遍历左右子树,将每个节点的判断结果累加到单分支节点的数量上。

      代码实现:

      #include <stdio.h>
      #include <stdlib.h>
      
      typedef struct node {
          int data;
          struct node* left;
          struct node* right;
      }Node;
      
      int countSingleNode(Node* root) {
          int count = 0;
          if (root == NULL) {
              return count;
          }
          if (root->left == NULL && root->right != NULL) {
              count++;
          }
          if (root->right == NULL && root->left != NULL) {
              count++;
          }
          count += countSingleNode(root->left);
          count += countSingleNode(root->right);
          return count;
      }
      
      int main() {
          //构建二叉树
          Node* root = (Node*)malloc(sizeof(Node));
          root->data = 1;
          root->left = (Node*)malloc(sizeof(Node));
          root->left->data = 2;
          root->left->left = NULL;           //2号节点为单分支节点
          root->left->right = NULL;
          root->right = (Node*)malloc(sizeof(Node));
          root->right->data = 3;
          root->right->left = (Node*)malloc(sizeof(Node));
          root->right->left->data = 4;
          root->right->left->left = NULL;
          root->right->left->right = NULL;
          root->right->right = NULL;         //左子树的4号节点为单分支节点
          int count = countSingleNode(root);
          printf("The count of single node is %d\n", count);
          return 0;
      }