PTA 统计二叉树度为2的结点个数

6-4 统计二叉树度为2的结点个数 (11 分)

本题要求实现一个函数,可统计二叉树中度为2的结点个数。

函数接口定义:


int NodeCount ( BiTree T);

T是二叉树树根指针,函数NodeCount返回二叉树中度为2的结点个数,若树为空,返回0。

裁判测试程序样例:


#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BiTNode
{
	ElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree Create();/* 细节在此不表 */

int NodeCount ( BiTree T);

int main()
{
	BiTree T = Create();

	printf("%d\n", NodeCount(T));
	return 0;
}
/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

2
int NodeCount ( BiTree T){
    if(T==NULL)
        return 0;
    if(T->lchild!=NULL&&T->rchild!=NULL)
        return 1+NodeCount(T->lchild)+NodeCount(T->rchild);
    else
        return NodeCount(T->lchild)+NodeCount(T->rchild);
}

原文地址:https://www.cnblogs.com/DirWang/p/11929986.html

时间: 2024-07-31 11:16:19

PTA 统计二叉树度为2的结点个数的相关文章

PTA 统计二叉树度为1的结点个数

6-3 统计二叉树度为1的结点个数 (10 分) 本题要求实现一个函数,可统计二叉树中度为1的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCount返回二叉树中度为1的结点个数,若树为空,返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType dat

Swust OJ975: 统计利用先序遍历创建的二叉树的度为2的结点个数

题目简述 利用先序递归遍历算法创建二叉树并计算该二叉树度为2结点的个数 输入 接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树). 输出 输出该用例对应的二叉树度为2的结点个数. 样例输入复制 ABCD###EF##G##H## 样例输出复制 3知识点:二叉树每个结点至多只有两棵子树,即二叉树中不存在大于2的结点故所求二叉树度为2的结点,即既有左孩子也要有右孩子 void DegreeTwo(Tree *&tree) { if(tree!=NULL

PTA 统计二叉树叶子结点个数

6-2 统计二叉树叶子结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的叶子结点个数. 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; st

PTA 统计二叉树结点个数

6-1 统计二叉树结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCount返回二叉树中结点个数,若树为空,返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; struct Bi

求二叉树第k层的结点个数

tag: 二叉树 - 层次遍历 思路: 用层次遍历思路求解 辅助: 队列 package com.zhaochao.tree; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** * Created by zhaochao on 17/1/23. */ public class NodesNumberKLevel { public int getNodesNumberKLevel

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点. ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数 二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现. ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结点,计数增1.因此,可使用类似于先序遍历的思路来实现,代码如下: //计算树中节点个数 private int nubmer

求二叉树中任意两个结点的距离

求二叉树中任意两个结点的距离 实现步骤: 计算跟到第一个结点的距离: 计算跟到第二个结点的距离: 计算lca: 计算跟到lca结点的距离: 结果为(1) + (2) - 2 * (4),因为重复计算了两次的从跟到lca结点的距离: 1 class Node(object): def __init__(self, value=0): self.value = value self.left = self.right = None def get_path_length(root, n, path)

019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)

写程序在一棵二叉树中找到两个结点的最近共同祖先. 分两种情况来讨论这个题: 第一种情况结点中没有指向父结点的指针 第二种情况接种有指向父节点的指针 我们先看第一种情况,结点中没有指向父结点的指针. 我们可以采用暴力搜索每一个结点,如果这个结点的子树中 有已知的两个结点,那我们就继续沿着左右子树找,如果左子树 能找到,我们就继续沿着左子树找,如果有子树能找到,我们就 沿着右子树找,不存在两个子树都能够找到. 代码: struct TreeNode {<pre name="code"

数据结构上机 【创建二叉树,并采用先中后序遍历,输出树高,度数为分别为0 1 2 的结点个数】

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<malloc.h> #define null 0 using namespace std; typedef struct node { int data;//节点 node *lchild,*rchild; }node,*Tree; typedef struct{ Tree to