原文链接:https://www.dreamwings.cn/ytu2345/2611.html

2345: 后序遍历二叉树

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

提交: 3  解决: 3

题目描述

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

输入

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

输出

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

样例输入

2
1 -1
1 2 0 3 4 -1

样例输出

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

代码:
#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)
    {
        Print(T->lchild);
        Print(T->rchild);
        printf(T->data?" %d":"",T->data);
    }
}
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 2345: 后序遍历二叉树的更多相关文章

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

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

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

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

  3. [C++] 非递归实现前中后序遍历二叉树

    目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...

  4. LeetCode 145. 二叉树的后序遍历 (用栈实现后序遍历二叉树的非递归算法)

    题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [ ...

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

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

  6. YTU 2344: 先序遍历二叉树

    原文链接:https://www.dreamwings.cn/ytu2344/2603.html 2344: 先序遍历二叉树 时间限制: 1 Sec  内存限制: 128 MB 提交: 4  解决:  ...

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

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

  8. 二叉树的先序、中序以及后序遍历(递归 && 非递归)

    树节点定义: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 递归建立二 ...

  9. java编写二叉树以及前序遍历、中序遍历和后序遍历 .

    /** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...

随机推荐

  1. 关于ASPCMS标签调用的一些总结

    菜单的应用 <ul class="nav navbar-nav"> {aspcms:navlist} {}<!--判断是否有下级目录--> <li c ...

  2. powerdesigner的基本使用转载

    http://www.blogjava.net/wangdetian168/archive/2011/04/07/347847.html

  3. HTTP协议 (五) 代理

    HTTP协议 (五) 代理 阅读目录 什么是代理服务器 Fiddler就是个典型的代理 代理作用一:FQ 代理作用二:匿名访问 代理作用三:通过代理上网 代理作用四:通过代理缓存,加快上网速度 代理作 ...

  4. javascript平时小例子②(正则表达式验证邮箱)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>邮 ...

  5. java中类的继承

    我们都知道java的四大特性:抽象.继承.封装.多态: 那么关于继承有哪些特性呢?下面看具体实例: (1) public class Person { public  int a=2; public  ...

  6. Java 正则表达式[转载]

    PS:转载自CSDN博客看上去很美 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学 ...

  7. Spinner的深入学习

    简介: spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择.Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装. ...

  8. JQuery-事件(部分)

    /* 1. bind跟on是类似的方法,下面示例可相互替换 $('#click1').on('click',toYellow); // click绑定toYellow方法 $('#click1').o ...

  9. WCF初识

    WCF能干什么? 在win32中,应用程序是运行在进程的线程中的,.NET出现之后,出现了AppDomain,其实就相当于在进程和线程之间又又了一层包装层,类似于子进程的概念,在一个进程或者应用程序域 ...

  10. PL/SQL 存储函数和过程

    --存储过程 .不带参: create or replace procedure 存储过程名 as|is --说明部分 begin --执行的语句: end: 调用存储过程 execute 存储过程名 ...