设以二叉链表作为二叉树的存储结构,写出如下算法:①用先序遍历的方法,统计二叉树中度为1的结点的个数;②用层次遍历的方法,统计二叉树中度为1的结点的个数

算法1:

  1. 初始化一个计数器count=0,遍历二叉树的过程中统计度为1的结点个数;
  2. 对于当前结点node,如果node为叶子结点(左右子树均为空),则直接返回;
  3. 如果node的左子树为空,说明node只有一个右孩子,count++,然后继续遍历node的右子树;
  4. 如果node的右子树为空,说明node只有一个左孩子,count++,然后继续遍历node的左子树;
  5. 如果node既有左子树又有右子树,分别遍历node的左右子树,递归调用以上步骤。

算法2:

  1. 初始化一个计数器count=0和一个队列queue,将根结点node入队;
  2. 队列不为空时,循环执行以下步骤:
    1. 取出队首结点cur;
    2. 如果cur的左子树非空,将其左子树入队;
    3. 如果cur的右子树非空,将其右子树入队;
    4. 如果cur的度为1,说明cur只有一个孩子,count++;
  3. 返回count。

 

算法1的代码:

def count_degree_one(node):
    if node is None:
        return 0
    # 如果node为叶子结点,直接返回0
    if node.left is None and node.right is None:
        return 0
    # 初始化计数器count为0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是使用二链表存储结构的二叉树层次统计度为1节点个数的代码实现(C++): ```c++ #include <iostream> #include <queue> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 层次叉树 void levelOrder(TreeNode* root) { if (root == NULL) return; queue<TreeNode*> q; q.push(root); while (!q.empty()) { int size = q.size(); for (int i = 0; i < size; i++) { TreeNode* node = q.front(); q.pop(); cout << node->val << " "; if (node->left) q.push(node->left); if (node->right) q.push(node->right); } cout << endl; } } // 统计度为1节点个数 int countDegreeOne(TreeNode* root) { if (root == NULL) return 0; int count = 0; if ((root->left == NULL && root->right != NULL) || (root->left != NULL && root->right == NULL)) { count = 1; } count += countDegreeOne(root->left) + countDegreeOne(root->right); return count; } int main() { // 创建二叉树 TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); root->right->left = new TreeNode(6); root->right->right = new TreeNode(7); // 层次叉树 levelOrder(root); // 统计度为1节点个数 int count = countDegreeOne(root); cout << "The number of nodes with degree 1 is: " << count << endl; return 0; } ``` 这里我们使用了“层次算法来遍叉树。具体来说,我们使用队列来存储每一层的节点,然后依次访问队列中的节点,并将它们的子节点(如果有的话)入队。这样我们就可以按照从上到下、从左到右的顺整棵树。 统计度为1节点个数算法非常简单。对于每个节点,如果它只有一个子节点(即左子节点或右子节点不为空),那么它就是度为1的节点。我们可以使用递归算法来遍整棵树,并统计符合条件的节点个数。 以上就是使用二链表存储结构的二叉树层次统计度为1节点个数的代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要什么私信我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值