数据结构作业7

问题 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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值