当前位置: 代码迷 >> 综合 >> SWUST OJ#973 #975 #976 #977 统计二叉树节点个数
  详细解决方案

SWUST OJ#973 #975 #976 #977 统计二叉树节点个数

热度:7   发布时间:2023-12-05 17:39:34.0

目录

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

题目

思路

代码

#976 统计利用先序遍历创建的二叉树的度为1的结点个数

题目

思路

代码

#973 统计利用先序遍历创建的二叉树叶结点(0度)的个数

题目

思路

代码

#977 统计利用先序遍历创建的二叉树中的空链域个数

题目

思路

代码


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

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树度为2结点的个数。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树度为2的结点个数。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态 

 输入

接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出该用例对应的二叉树度为2的结点个数。

样例输入

#
A##
ABC####
AB##C##
ABCD###EF##G##H##
A##B##
#A

样例输出

0
0
0
1
3
0
0

思路

左右子树同时依次向下分治遍历,统计若度为2(也就是左右孩子节点均非空),值加一。

代码

二叉树模板,二叉树介绍

int node_two(BinaryTree* &root) {if(root==NULL) return 0;//同时搜索左右孩子节点//当左右孩子节点都不为空,说明是2度节点,值加一if(root->left!=NULL&&root->right!=NULL) return node_two(root->left)+node_two(root->right)+1;//否则直接搜索else return node_two(root->left)+node_two(root->right);
}

#976 统计利用先序遍历创建的二叉树的度为1的结点个数

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树度为1结点的个数。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树度为1的结点个数。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

每个用例用一行输出该用例对应的二叉树度为1的结点个数。

样例输入

#
A##
ABC####
AB##C##
ABCD###EF##G###
A##B##
#A

样例输出

0
0
2
0
2
0
0

思路

左右子树同时依次向下分治遍历,统计若度为1(也就是左右孩子节点有一个为空),值加一。

代码

二叉树模板,二叉树介绍

int node_one(BinaryTree* &root) {if(root==NULL) return 0;//同时搜素左右孩子节点//当左右孩子节点有一个不为空,一个为空,说明是1度节点,值加一if(root->left!=NULL&&root->right==NULL || root->right!=NULL&&root->left==NULL) return node_one(root->left)+node_one(root->right)+1;//否则直接搜索else return node_one(root->left)+node_one(root->right);
}

#973 统计利用先序遍历创建的二叉树叶结点(0度)的个数

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树叶结点的个数。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树叶结点的个数。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出对应的二叉树叶结点的个数。 

样例输入

#
A##
ABC####
AB##C##
ABCD###EF##G###
A##B##
#A

样例输出

0
1
1
2
3
1
0

思路

左右子树同时依次向下分治遍历,统计若度为0(也就是左右孩子节点均为空),值加一。

代码

二叉树模板,二叉树介绍

int node_zero(BinaryTree* &root) {if(root==NULL) return 0;//同时搜素左右孩子节点//当左右孩子节点都为空,说明是0度节点,返回1if(root->left==NULL && root->right==NULL) return 1;//否则直接搜索else return node_zero(root->left)+node_zero(root->right);
}

#977 统计利用先序遍历创建的二叉树中的空链域个数

题目

题目描述

利用先序递归遍历算法创建二叉树并计算该二叉树中的空链域个数。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树中的空链域个数。需要注意输入数据序列中的"#"字符和非"#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出该用例对应的二叉树中的空链域个数。

样例输入

A##
ABC####
AB##C##
ABCD###EF##G###
A##B##

样例输出

2
4
4
8
2

思路

左右子树同时依次向下分治遍历,统计若该节点为空,值加一。

代码

二叉树模板,二叉树介绍
 

int node_NULL(BinaryTree* &root) {//当该节点为空,返回1if(root=NULL) return 1;//否则搜索左右孩子else return node_NULL(root->left)+node_NULL(root->right);
}