原文链接:https://www.dreamwings.cn/ytu2344/2603.html

2344: 先序遍历二叉树

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

提交: 4  解决: 3

题目描述

给定一颗二叉树,要求输出二叉树的深度以及先序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。

输入

输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替),比如输入:

1 2 0 3 4 -1得到的二叉树如下:

1

2 #

3 4

输出

输出每棵二叉树的深度以及先序遍历二叉树得到的序列。

样例输入

2
1 -1
1 2 0 3 4 -1

样例输出

1 1
3 1 2 3 4
思想:根据数据层序建立一棵二叉树,然后对其进行先序遍历即可~

代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
typedef struct Node             //定义二叉树
{
    int data;
    Node* lchild;
    Node* rchild;
} TBNode;
int depin;
void Init(TBNode *T)            //建立二叉树
{
    TBNode *a[105];
    TBNode *p=T;
    int real=0;
    while(cin>>p->data&&p->data!=-1)    //层序输入数据
    {
        a[++real]=p;                    //当前节点入队
        if(real/2!=0)                   //如果不是根节点,为当前节点父节点添加指针
        {
            if(real%2)a[real/2]->rchild=p;  //如果不能整除二说明是它父节点的右孩子
            else a[real/2]->lchild=p;       //否则为父节点左孩子
        }
        p->lchild=NULL;                 //当前节点孩子指针域设置为NULL
        p->rchild=NULL;
        p=(TBNode*)malloc(sizeof(TBNode));
    }
    depin=(int)ceil(log2(real+1));      //二叉树深度为所有节点个数加一 log2(real+1)向上取整
}
void Print(TBNode *T)               //先序输出二叉树
{
    if(T!=NULL)
    {
        printf(T->data?" %d":"",T->data);
        Print(T->lchild);
        Print(T->rchild);
    }
}
int main()
{
    int N;
    cin>>N;
    TBNode *Tree;                   //根节点
    Tree=(TBNode*)malloc(sizeof(TBNode));
    while(N--)
    {
        Init(Tree);                 //建立二叉树
        printf("%d",depin);         //输出深度
        Print(Tree);                //输出二叉树
        printf("\n");
    }
    return 0;
}


YTU 2344: 先序遍历二叉树的更多相关文章

  1. YTU 2345: 后序遍历二叉树

    原文链接:https://www.dreamwings.cn/ytu2345/2611.html 2345: 后序遍历二叉树 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决:  ...

  2. YTU 2346: 中序遍历二叉树

    原文链接:https://www.dreamwings.cn/ytu2346/2606.html 2346: 中序遍历二叉树 时间限制: 1 Sec  内存限制: 128 MB 提交: 12  解决: ...

  3. Leetcode 94. Binary Tree Inorder Traversal (中序遍历二叉树)

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  4. PHP递归方法实现前序、中序、后序遍历二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). class Node { public $value; pub ...

  5. php循环方法实现先序、中序、后序遍历二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). <?php class Node { public $v ...

  6. java创建二叉树并实现非递归中序遍历二叉树

    java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...

  7. LeetCode OJ:Binary Tree Inorder Traversal(中序遍历二叉树)

    Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...

  8. Binary Tree Inorder Traversal-非递归实现中序遍历二叉树

    题目描述: 给定一颗二叉树,使用非递归方法实现二叉树的中序遍历 题目来源: http://oj.leetcode.com/problems/binary-tree-inorder-traversal/ ...

  9. 094 Binary Tree Inorder Traversal 中序遍历二叉树

    给定一个二叉树,返回其中序遍历.例如:给定二叉树 [1,null,2,3],   1    \     2    /   3返回 [1,3,2].说明: 递归算法很简单,你可以通过迭代算法完成吗?详见 ...

随机推荐

  1. flock防止重复rsync

    我使用crontab同步一个文件夹时,发现一个问题,我在crontab中设置的1分钟运行一次.但当那个文件夹的内容改变时.1分钟不一定能同步完,但这时第二个rsync进行又起来了. 这个就产生一个问题 ...

  2. 仅使用处理单个数字的I/O例程,编写一个过程以输出任意实数(可以是负的)

    题目取自:<数据结构与算法分析:C语言描述_原书第二版>——Mark Allen Weiss   练习1.3 如题. 补充说明:假设仅有的I/O例程只处理单个数字并将其输出到终端,我们将这 ...

  3. PNG图片去除额外透明区域

    bitmapdata.getColorBoundsRect(0xFF000000,0x00000000,false) http://www.cnblogs.com/shinings/archive/2 ...

  4. codeforces343A A. Rational Resistance

    http://http://codeforces.com/problemset/problem/343/A A. Rational Resistance time limit per test 1 s ...

  5. [转]Java中的多线程你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  6. linux第9天 UDP

    今天学了一点UDP知识,还是IP协议.都不是重点,重点是socket服务器框架 不过还是把今天学的东西,先罗列出来,将来复习的时候方便 q  UDP报文可能会丢失.重复 q  UDP报文可能会乱序 q ...

  7. SparkSQL JSON数据操作(1.3->1.4)

    1.用户自定义schema data json串格式如下: { "partner_code": "demo", "app_name": &q ...

  8. 夺命雷公狗---DEDECMS----33dedecms自定义搜索以及分页功能完成

    我们现在要开始实现模版里面的搜索功能了,我们先找要做出一个检索提交表单,如下所示: 只要我们点击生成之后我们的表单就获取到了,可以直接拿生成好的html表单拿来用来测试下.. 将他嵌入首页的模版文件, ...

  9. js默认比较第一个数字大小

    解决办法:先把数字用Number转化:num=Number(num);然后再比较 和parseInt区别

  10. 解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题

    首先,请google “ultravnc ctrl+alt+delete”,得到的解决方法是,更改UAC.进入组策略-计算机配置-管理模板-windows登陆选项,“禁用或启用软件注意序列”,更改成“ ...