问题 BD: 二叉树的性质
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:745解决:765
题目描述
二叉树每个节点的度,等于其子节点的个数。
现在已知一棵二叉树的叶节点(即度为0的节点)数量,请你求解这个二叉树上有多少个节点有2个子节点呢?
输入
输入一个正整数,即一棵二叉树的叶节点数量。
输出
输出一个正整数,即这棵二叉树上有2个子节点的节点数量。
样例输入 复制
3
样例输出 复制
2
问题 BE: 二叉树的节点
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:730解决:604
题目描述
二叉树的深度为h,求这个二叉树的节点数最少,最多分别是多少呢?
输入
输入为一个正整数h,表示二叉树的深度
输出
输出包括2个正整数,分别是二叉树最少的节点数,最多的节点数
样例输入 复制
1
样例输出 复制
1 1
问题 BF: 满二叉树
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:1008解决:735
题目描述
根据二叉树的深度和节点数,判断一个二叉树是否为满二叉树
输入
输入包括包括多行,每行2个正整数,h和n,分别代表二叉树的深度和节点数
输出
如果是满二叉树,输出YES,否则输出NO
样例输入 复制
1 1
3 3
样例输出 复制
YES
NO
问题 BG: 完全二叉树的节点序号
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:504解决:577
题目描述
给定一个完全二叉树的节点,根据该节点的序号,求解其父节点和左右子节点的序号。
该完全二叉树的根节点序号为0
输入
输入包括多行,每行为一个整数,即节点序号
输出
针对每个节点序号,输出3个整数,父节点编号,左右子节点编号
约定根节点的父节点编号为-1
输入的每个节点都有子节点
样例输入 复制
0
1
2
样例输出 复制
-1 1 2
0 3 4
0 5 6
问题 BH: 二叉树的深度
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:外部导入
提交:2900解决:1808
题目描述
计算二叉树的深度,空树深度为 0。
输入
第 1 行为测试用例数 m。 第 2 行开始,每一行是一个含空结点的二叉树的前序遍历序列(序列长度不小于 1,不大于 1024),空结点用 # 表示。非空结点的符号为字母或数字。
输出
对每一个测试用例,输出一行对应二叉树的深度。
样例输入 复制
2
ab##c##
a#b#c##
样例输出 复制
2
3
问题 BI: 数据结构作业04 -- 二叉树的输入
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:外部导入
提交:4971解决:2257
题目描述
用二叉树的带虚结点表示的前序遍历序可以唯一的确定一棵二叉树。
输入
每行是一棵二叉树的带虚结点(#)表示的前序遍历序串,长度不超过2000。每个结点为一个小写字母或一个数字。
输出
对每行输入,输出对应二叉树的中序遍历序(不含虚结点)、后序遍历序(不含虚结点)和层次遍历序(不含虚结点)。 每棵二叉树的输出占一行,中序遍历序、后序遍历序和层次遍历序之间用一个空格隔开。
样例输入 复制
ab##c##
#
ab###
样例输出 复制
bac bca abc
ba ba ab
提示
Sample Input的第二行表示一棵空树,因此输出时输出两个空格。
问题 BJ: 给定前序遍历序手动构造二叉树-附加代码模式
内存限制:128 MB时间限制:1.000 S
评测方式:文本比较命题人:liuyong
提交:797解决:631
题目描述
本题的目的是让同学们熟悉二叉树的结构体定义,通过手动的方式分配每个节点内存空间,分配左右子节点,来构造二叉树。
本题为附加代码模式,以下代码为自动附加在同学们提交的代码后面。在本题的提示中有代码框架,请同学们拷贝后,修改,再注释掉部分代码,最后提交。
// please comment the following code when you sumbit to OJ
int PreTraverse(BiTree T){
if (T == NULL) return 0;
cout << T->data;
PreTraverse(T->lchild);
PreTraverse(T->rchild);
return 0;
}
int DestroyBiTree(BiTree &T){
if (T == NULL) return 0;
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
delete T;
T = NULL;
return 0;
}
int main(){
BiTree tree;
InitBiTree(tree);
ManuallyCreateTree(tree);
PreTraverse(tree);
cout << endl;
DestroyBiTree(tree);
return 0;
}
输入
无
输出
输出手动构造的二叉树的前序遍历序
样例输入 复制
样例输出 复制
abdcef
提示
以下为代码框架
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
using namespace std;
struct BiNode
{
string data;
BiNode *lchild, *rchild;
};
typedef BiNode *BiTree;
int InitBiTree(BiTree &T)
{
T = NULL;
return 0;
}
void ManuallyCreateTree(BiTree & T){
// please write your code to manually create a biTree
// the following code shows an example
T = new BiNode();
T->data = "a";
BiNode* n1 = new BiNode();
n1->data = "b";
BiNode* n2 = new BiNode();
n2->data = "c";
T->lchild = n1;
T->rchild = n2;
n1->lchild = NULL;
n1->rchild = NULL;
n2->lchild = NULL;
n2->rchild = NULL;
}
// please comment the following code when you sumbit to OJ
int PreTraverse(BiTree T){
if (T == NULL) return 0;
cout << T->data;
PreTraverse(T->lchild);
PreTraverse(T->rchild);
return 0;
}
int DestroyBiTree(BiTree &T){
if (T == NULL) return 0;
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
delete T;
T = NULL;
return 0;
}
int main(){
BiTree tree;
InitBiTree(tree);
ManuallyCreateTree(tree);
PreTraverse(tree);
cout << endl;
DestroyBiTree(tree);
return 0;
}