原文链接:https://www.dreamwings.cn/ytu3025/2628.html

3025: 创建二叉树

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

提交: 3  解决: 3

题目描述

已知一颗二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,给出二叉树的树形表示(用括号法)。

输入

输出

输出带有括号与字母的用括号法表示的二叉树。

提示

首先根据中序序列和后序序列画出二叉树,然后用括号法表示之。

利用中序序列与后序序列构造二叉树,然后采用括号表示法输出!



AC代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
    char data;
    Node *lc;
    Node *rc;
} Node;
Node *CreateBT2(char *post,char *in,int n)
{
    Node *b;
    int r,k;
    char *p;
    if(n<=0)return NULL;
    r=*(post+n-1);                      //定位到当前区间最后一个地址,根节点
    b=(Node*)malloc(sizeof(Node));
    b->data=r;                          //开始创建
    for(p=in; p<in+n; p++)
        if(*p==r)break;
    k=p-in;                             //定位根节点在中序遍历中的位置
    b->lc=CreateBT2(post,in,k);
    b->rc=CreateBT2(post+k,p+1,n-k-1);
    return b;
}
void Print(Node *b)
{
    if(b!=NULL)
    {
        printf("%c",b->data);
        if(b->lc!=NULL||b->rc!=NULL)
        {
            printf("(");
            Print(b->lc);
            if(b->rc!=NULL)printf(",");
            Print(b->rc);
            printf(")");
        }
    }
}
int main()
{
    int len;
    Node *head;
    char post[30]="cedbhjigfa",in[30]="cbedahgijf";     // 存储先序和中序遍历的序列
    head=(Node*)malloc(sizeof(Node));
    len=strlen(post);
    head=CreateBT2(post,in,len);                        //构造二叉树
    Print(head);                                        //用括号表示法输出二叉树
    return 0;
}

YTU 3025: 创建二叉树的更多相关文章

  1. 非递归创建二叉树( C++队列 )

    非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 f ...

  2. 创建二叉树,C语言实现

    一.前序遍历创建二叉树,使用递归,头文件 BiTree.h /*槽点一:创建树时用scanf输入不成功*/ #ifndef BITREE_H #define BITREE_H #include< ...

  3. c/c++ 用前序和中序,或者中序和后序,创建二叉树

    c/c++ 用前序和中序,或者中序和后序,创建二叉树 用前序和中序创建二叉树 //用没有结束标记的char*, clr为前序,lcr为中序来创建树 //前序的第一个字符一定是root节点,然后去中序字 ...

  4. c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历

    #include <iostream> #include <cstdio> #include <stdio.h> #include <string> # ...

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

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

  6. 递归------python实现列表创建二叉树

    # -*- coding:utf-8 -*- '二叉树结点类' class TreeNode: def __init__(self, x): self.val = x self.left = None ...

  7. 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言

    #include "stdio.h" #include "string.h" #include "malloc.h" #define NUL ...

  8. c使用二叉链表创建二叉树遇到的一些疑问和思考

    二叉链表存储二叉树 学习的时候参考的是<大话数据结构>,书中是这样定义的 typedef char TElemType; typedef struct BiTNode { TElemTyp ...

  9. 用c语言实现前序创建二叉树(递归),分别用前序,中序,后序遍历,以及分别输出节点个数和叶子节点个数

    本人c语言小白一枚,近期在学习数据结构(c语言版),特写此随笔,做一些总结和分享,如有不当之处,请各位技术大牛斧正 首先我们用一个结构体来抽象树的结点,代码如下(这里我们存放的数据为char型,大家可 ...

随机推荐

  1. linux重新设定分区大小

    一.目的 在使用CentOS6.3版本Linux系统的时候,发现根目录(/)的空间不是很充足,而其他目录空间有很大的空闲,所以本文主要是针对现在已有的空间进行调整.首先,先来查看一下系统的空间分配情况 ...

  2. HttpClientUtils.java

    package com.vcredit.ddcash.batch.util; import java.io.BufferedReader;import java.io.ByteArrayOutputS ...

  3. BizTalk动手实验(十五)AS2消息安全传输

    1 课程简介 本课程将配置AS2相关的安全传输配置,学员可以通过本课程熟悉相关的安全配置. 2 准备工作 为了模拟实际的B2B交互过程,本实验需要2台BizTalk Server 2010虚拟机(两两 ...

  4. Java中this关键字的几种用法

    1 . 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量.(this是当前对象自己) 如:public class Hello { String s = " ...

  5. 代理模式 & Java原生动态代理技术 & CGLib动态代理技术

    第一部分.代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常 ...

  6. DBXJSON和ADO的效率真的好低....

    项目需要写了一个JSON和DataSet互转的单元.....支持了Delphi自带的几种DataSet, 结果发现DBXJSON和ADO的效率真的是好低啊........-_-.... 开发环境是XE ...

  7. UIWebView如何获取内容高度

    iOS UIWebView如何获取到内容的高度呢?我们经常会遇到项目中需要使用UIWebView来加载H5页面,但是页面的高度并不确定,而我们前端需要根据内容的高度呈现出来,且不允许webview滚动 ...

  8. ssm框架中的struts我的配置问题

    <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE struts PUBLIC    &qu ...

  9. zabbix自动发现监控url

    1.在监控客户机上 web_site_code_status.sh: #!/bin/bash UrlFile="/opt/scripts/WEB.txt" IFS=$'\n' we ...

  10. ps aux和ps -ef命令区别

      ps aux 是用BSD的格式来显示 java这个进程 显示的项目有:USER,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME,COMMAND   ps -ef ...