原文链接:https://www.dreamwings.cn/ytu3022/2595.html

3022: 完全二叉树(1)

时间限制: 1
Sec  内存限制: 128
MB

提交: 26  解决: 7

题目描述

一棵具有n个节点的完全二叉树以顺序方式存储在数组A中,设计一个算法构造该二叉树的链存储结构。

即编写一个函数,将二叉树数组存储形式转移到*Tree中。

其中二叉树的节点定义为

typedef struct Node
{
    ElemType data;
    Node* lchild;
    Node* rchild;
} TBNode;
 
编写一个函数
void solve(TBNode *&Tree,char *c,int pos);  完成相应操作。
// Tree为二叉树根节点,c为二叉树数组的形式表示,main()中传入的pos=1

输入

输入只有一行,为二叉树的数组表示形式。

输出

输出只有一行,为二叉树链存储结构的层序遍历.

样例输入

ABCD#EF#G##H##I

样例输出

ABCDEFGHI
思想:根据二叉树以数组表示形式的定义,每一个节点的孩子节点所在位置是它本身位置的二倍与二倍加一,就这样。

比如a[0]的位置是1,它的孩子节点是a[1*2-1]与a[1*2]   //减一是因为逻辑位序和物理位序差1

然后利用递归的思想,便可以建立起整个二叉树的链状结构了!

算法部分:
void solve(TBNode *&Tree,char *c,int pos)
{
    if(c[pos-1]=='#'||pos>(int)strlen(c))   //递归出口为该节点为NULL
    {
        Tree=NULL;
        return;
    }
    Tree=(TBNode*)malloc(sizeof(Node));     //开辟空间
    Tree->data=c[pos-1];
    solve(Tree->lchild,c,pos*2);            //递归左孩子
    solve(Tree->rchild,c,pos*2+1);          //递归右孩子
}


完整代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
#define SizeMax 205
typedef struct Node
{
    ElemType data;
    Node* lchild;
    Node* rchild;
} TBNode;
void solve(TBNode *&Tree,char *c,int pos)
{
    if(c[pos-1]=='#'||pos>(int)strlen(c))   //递归出口为该节点为NULL
    {
        Tree=NULL;
        return;
    }
    Tree=(TBNode*)malloc(sizeof(Node));     //开辟空间
    Tree->data=c[pos-1];
    solve(Tree->lchild,c,pos*2);            //递归左孩子
    solve(Tree->rchild,c,pos*2+1);          //递归右孩子
}
void Print(TBNode *Tree)
{
    TBNode *p;
    TBNode *qu[SizeMax];
    int front,rear;
    front=rear=-1;
    rear++;
    qu[rear]=Tree;
    if(Tree==NULL)return;
    while(front!=rear)
    {
        front=(front+1%SizeMax);
        p=qu[front];
        printf("%c",p->data);
        if(p->lchild!=NULL)
        {
            rear=(rear+1)%SizeMax;
            qu[rear]=p->lchild;
        }
        if(p->rchild!=NULL)
        {
            rear=(rear+1)%SizeMax;
            qu[rear]=p->rchild;
        }
    }
}
int main()
{
    char c[205];
    TBNode *Tree;
    gets(c);
    solve(Tree,c,1);
    Print(Tree);
    return 0;
}

YTU 3022: 完全二叉树(1)的更多相关文章

  1. [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数

    Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from W ...

  2. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)

    1057: 输入两个整数,求他们相除的余数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 136[Submit][Status ...

  3. ytu 1058: 三角形面积(带参的宏 练习)

    1058: 三角形面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 190  Solved: 128[Submit][Status][Web Boar ...

  4. ytu 1980:小鼠迷宫问题(DFS 深度优先搜索)

     小鼠迷宫问题 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 1  Solved: 1 [Submit][Status][Web Board] Desc ...

  5. PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  6. [nowCoder] 完全二叉树结点数

    给定一棵完全二叉树的头节点head,返回这棵树的节点个数.如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法. 分析:遍历的话不管是前序.中序.后序还是层次都是O(N),低于O(N)只能是 ...

  7. 完全二叉树的高度为什么是对lgN向下取整

    完全二叉树的高度为什么是对lgN向下取整呢? 说明一下这里的高度:只有根节点的树高度是0. 设一棵完全二叉树节点个数为N,高度为h.所以总节点个数N满足以下不等式: 1 + 21 + 22 +……+ ...

  8. [itint5]完全二叉树节点个数的统计

    http://www.itint5.com/oj/#4 这题是利用完全二叉树的性质计算节点数目.那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算. //使用getLeftChildN ...

  9. [九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)

    原题链接:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...

随机推荐

  1. less 初试

    第一次接触less,做些记录. 官网     民间中文文档      less notepad++插件 1. 支持变量声明 支持颜色.大小等相加 @nice-blue: #5B83AD; @light ...

  2. 错误是无法将“XXX”转换为“System.CompenentModel.Design.Serialization.InstanceDescrip”问题的解决办法

    发生原因: 出现这个问题的原因是两次编译生成的程序集的版本一样,导致VS的窗体设计器没有获取到最新的运行时对象,而出现的错误. 解决办法: 修改项目的配置信息,使其每次编译的时候都生成不同的版本. 在 ...

  3. PAT 解题报告 1009. Product of Polynomials (25)

    This time, you are supposed to find A*B where A and B are two polynomials. Input Specification: Each ...

  4. zabbix监控企业esxi虚拟机

    zabbix监控企业esxi虚拟机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我来公司有一段时间了,最近也发现模型部有测试和开发反应某台机器登陆不上去了,结果登陆esxi服务器 ...

  5. 3D照片放大展示窗口

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  6. 数据库性能之--ibatis cache应用

    (1)利用cache是提升性能的一个很重要方式!cacheModel节点定义了本映射文件中使用的Cache机制:<cacheModel id="userCache" type ...

  7. 转:python webdriver API 之浏览器的操作

    1.1.浏览器最大化在统一的浏览器大小下运行用例,可以比较容易的跟一些基于图像比对的工具进行结合,提升测试的灵活性及普遍适用性.比如可以跟 sikuli 结合,使用 sikuli 操作 flash.# ...

  8. 免安装版的MySQL的安装与配置

    1. 将下载的 mysql-noinstall-5.1.69-win32.zip 解压至需要安装的位置, 如: C:\Program Files; 2. 在安装文件夹下找到 my-small.ini ...

  9. nyist 593 Take it easy

    http://acm.nyist.net/JudgeOnline/problem.php?pid=593 Take it easy 时间限制:1000 ms  |  内存限制:65535 KB 难度: ...

  10. centos dhcp网络设置

    CentOS 网络设置修改   一.CentOS 修改IP地址 修改对应网卡的IP地址的配置文件# vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改以下内 ...