【C语言】数据结构C语言版 实验7 二叉树

2023-05-16

/*
编写算法函数void preorder1(bintree t)实现二叉树t的非递归前序遍历。
*/
#include "bintree.h"
char *a="ABC##D#E##F##";  /*扩充二叉树序树t的前序序列*/
/*函数preorder1()的功能是非递归前序遍历二叉树t,请将函数补充完整并调试运行*/
void preorder1(bintree t)
{
    seqstack s;//顺序栈s 
    s.top=0;
    while((t) || (s.top!=0)) //当前处理的子树不为空或栈不为空则循环 
    {
        if(t)
        {
            printf("%c ",t->data);
            push(&s,t);
            t=t->lchild;
        }
        else
        {
            t=pop(&s);
            t=t->rchild;
        }
    }
}
int main()
{   bintree t;
    t=creatbintree();   /*建立二叉树t的存储结构*/
    printf("二叉树的前序序列为:\n");
    preorder1(t);       /*前序非递归遍历二叉树*/
    return 0;
}
/*
编写算法函数void levelbintree(bintree t),实现二叉树的层次遍历。
*/
#include "bintree.h"
char *a="ABC##D#E##F##";              /*扩充二叉树序树t的前序序列*/
void levelbintree(bintree t)
{
    bintree queue[100];
    int f=0,r=1;
    bintree p;
    queue[0]=t;
    while(f<r)
    {
        p=queue[f]; f++; printf("%c",p->data);
        if(p->lchild)
            queue[r++]=p->lchild;
        if(p->rchild)
            queue[r++]=p->rchild;
    }
}
int main()
{   bintree t;
    t=creatbintree();       /*建立二叉树t的存储结构*/
    printf("二叉树的层次序列为:\n");
    levelbintree(t);       /*层次遍历二叉树*/
    return 0;
}
/*
编写函数bintree prelist(bintree t),bintree postfirst(bintree t),
分别返回二叉树t在前序遍历下的最后一个结点地址和后序遍历下的第一个结点地址。
*/
#include "bintree.h"
char *a="ABC##D##EF#G###";  /*扩充二叉树序树t的前序序列*/
bintree prelast(bintree t)
{    //右下叶子结点                                                
    bintree p;
    if(t)
    {
        p=t;
        while(p&&p->lchild||p->rchild)
        {
            if(p->rchild)
            {
                p=p->rchild;
            }
            else
            {
                p=p->lchild;
            }
        }
    }
    return p; //返回前序序列最后一个结点G 
}
bintree postfirst(bintree t)
{                //后序遍历是左子树-右子树-根结点 ,二叉树的左下叶子结点是第一个 
    bintree p;
    if(t)
    {
        while(p&&p->lchild||p->rchild)
        {
            if(p->lchild)
            {
                p=p->lchild;
            }
            else
            {
                p=p->rchild;
            }
        }
    }
    return p;//返回后序序列第一个结点 C
}
int main()
{   bintree t,p,q;
    t=creatbintree();       /*建立二叉树t的存储结构*/
     p=prelast(t);
    //q=postfirst(t);
    if (t!=NULL)
            { printf("前序遍历最后一个结点为:%c\n",p->data);
              // printf("后序遍历第一个结点为:%c\n",q->data);
            }
     else    printf("二叉树为空!");
    return 0;
}
/*
假设二叉树采用链式方式存储,t为其根结点,编写一个函数int Depth(bintree t, char x),求值为x的结点在二叉树中的层次。
*/
#include "bintree.h"
char *a="ABC##D##EF#G###";          /*扩充二叉树序树t的前序序列*/
/*
     函数Depth,功能:求结点x所在的层次
*/
int Depth(bintree t,char x)
{
    int num1,num2,n;//num1,num2分别记录在左子树,右子树中查找到x的层数,n记录最终返回的结果层数
    if(t==NULL)
    {
        return 0;
    }
    else
    {
        if(t->data==x)
        {
            return 1;
        }
        num1=Depth(t->lchild,x);
        num2=Depth(t->rchild,x);
        n=num1+num2; //num1和num2之中必有一个为0 
        if(num1!=0||num2!=0) //找到了x ,往回数 
        {
            n++;
        }
    }
    return n;
}
int main()
{  bintree root;
   char x;
   int k=0;
   root=creatbintree();
   printf("请输入树中的1个结点值:\n");
   scanf("%c",&x);
   k=Depth(root,x);
   printf("%c结点的层次为%d\n",x,k);
}
 
/*
   试编写一个函数,将一棵给定二叉树中所有结点的左、右子女互换。
*/
#include "bintree.h"
char *a="ABC##D##EF#G###";          /*扩充二叉树序树t的前序序列*/
/*请将本函数补充完整,并进行测试*/
void change(bintree t)
{
    bintree p;
    if(t)
    {
        p=t->lchild; //交换 
        t->lchild=t->rchild;
        t->rchild=p;
        change(t->lchild); //继续递归 
        change(t->rchild);
    }
}
int main()
{  bintree root;
   root=creatbintree();
   change(root);
   preorder(root);
}
/*
试编写一个递归函数bintree buildBintree(char *pre, char *mid, int length),
根据二叉树的前序序列pre、中序序列mid和前序序列长度length,构造二叉树的二叉链表存储结构,
函数返回二叉树的树根地址。
*/
#include "bintree.h"
#include <string.h>
char *a="";
/*请将本函数补充完整,并进行测试*/
bintree buildBintree(char *pre, char *mid,int length)
{
    bintree t;
    int i=0;
    if(length)
    {
        t=(bintree)malloc(sizeof(binnode)); //生成新结点
        t->data=pre[i];
        while(i<length&&mid[i]!=pre[0])     //在中序遍历中查找根结点的位置
            i++;
        t->lchild=buildBintree(pre+1,mid,i);
        t->rchild=buildBintree(pre+i+1,mid+i+1,length-i-1);
    }
    else
        return NULL;
    return t;
}
int main()
{   bintree root;
    char pre[100],mid[100];
    puts("请输入前序序列:");
    gets(pre);
    puts("请输入中序序列:");
    gets(mid);
    root=buildBintree(pre,mid,strlen(pre));
    puts("后序序列是:");
    postorder(root);
}
/*bintree.h头文件*/
#include<stdio.h>
#include<stdlib.h>
#define N 100
extern char *a;
typedef struct node
{    
    char data;
    struct node *lchild, *rchild;
}binnode;
typedef binnode *bintree;
/*函数creatbintree(根据扩充二叉树的前序序列(字符a)建立二叉树t的存储结构)*/
binnode  creatbintree()
{
    char ch = *a++;
    bintree t;
    if (ch == '#') t = NULL;
    else
    {
        t = (bintree)malloc(sizeof(binnode));
        t->data = ch;
        t->lchild = creatbintree();
        t->rchild = creatbintree();
    }
    return t;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】数据结构C语言版 实验7 二叉树 的相关文章

  • 如何删除 AlibabaProtect.exe 和 Alibaba PC Safe Service ?

    起因 xff1a 最近被迫升级PC版的阿里旺旺以后 xff0c 系统就莫名其妙的出现问题 xff0c 首先是电脑系统被严重拖慢 xff0c 电脑从开机到正常进入系统至少要5分钟 xff0c 最令我恼火的是 xff0c 本人的电脑一旦接入外接
  • 跨境支付的信息安全知识

    恐怖了 xff0c PayPal这直接清零 xff0c 一点机会也不给了 跨境的大佬们应该都知道 xff0c 自今年3月以来陆续有独立站卖家收到PAYPAL发来的邮件 xff0c 邮件打过是关于账户因为违规被冻结或封禁 中国的跨境电商圈一石
  • 网络安全审查办公室对知网启动审查,数据安全是关键

    据中国网信网消息 xff0c 网络安全审查办公室有关负责人表示 xff0c 为防范国家数据安全风险 xff0c 维护国家安全 xff0c 保障公共利益 xff0c 依据 国家安全法 网络安全法 数据安全法 xff0c 按照 网络安全审查办法
  • 从法律角度看数据安全,数据销毁很重要

    2021年1月 xff0c 巴西的一个数据库30TB数据被破坏 xff0c 泄露的数据包含有1 04亿辆汽车和约4000万家公司的详细信息 xff0c 受影响的人员数量可能有2 2亿 xff1b 2021年3月 xff0c 印度800万核酸
  • 大数据下的数据安全治理,数据销毁很重要

    企业数据安全治理的本质是建立 维护一组企业的 数据法规 xff0c 由这些法规来规范企业所有人员的所有数据活动 任何企业都在使用 产生数据 如果数据是一次性使用的 数据的产生仅仅是副产品 xff0c 那么数据治理就无太大意义 xff0c 应
  • IT界头条2022年7月1日版

    2022年7月 1日 1 国家网信办发布 互联网用户账号信息管理规定 8月1日起施行 2 腾讯 QQ 回应大批账号被盗 xff1a 用户扫描不法分子伪造的游戏登录二维码 3 网络安全审查办公室对知网启动网络安全审查 4 俄罗斯对谷歌传播诋毁
  • 数据安全与销毁案例:美国最近发生大规模数据泄露

    据福克斯新闻网6月20日报道 xff0c 一位网络安全专家称 xff0c 美国近日发生一起大规模的选民信息泄露事件 xff0c 将近2亿选民的个人信息遭意外曝光 网络风险研究员克里斯 维克里在其博客文章中表示 xff0c 与美国共和党全国委
  • 回收销毁,IT界头条2022年7月12日版

    2022年7月 12日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 回收销毁,IT界头条2022年7月7日版

    2022年7月 7日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 数据安全与销毁:数据安全已经上升到了国家战略层面

    日前 xff0c 中央全面深化改革委员会审议通过了 关于构建数据基础制度更好发挥数据要素作用的意见 xff08 下称 意见 xff09 xff0c 明确提出 把安全贯穿数据治理全过程 业内专家表示 xff0c 数据安全已经上升到了国家战略层
  • C++用带有默认参数的函数实现,求2个或3个正整数中的最大数

    1 题目要求如下 xff1a C 43 43 用带有默认参数的函数实现 xff0c 求2个或3个正整数中的最大数 2 来吧 xff0c 展示 xff1a include lt iostream gt using namespace std
  • 程序设计思维与实践 Week2 作业B "倒水问题"

    数据 xff1a Sample Input xff1a 2 7 5 2 7 4 Sample Output xff1a fill B pour B A success fill A pour A B fill A pour A B succ
  • armbian的换源

    安装好armbian和众多Linux一样 xff0c 最重要的就是把原来的官方源给替换掉 xff0c 换成国内的源 xff0c 当然个人建议还是把官方的源备份一下以防出错 cp etc apt sources list etc apt so
  • Ubuntu18.04上网断断续续

    刚刚体验了一把Ubuntu18 04 LTS xff0c 有个小问题就是 xff0c 网络链接老是断断续续 后来在这里找到了解决方法 xff1a span class hljs built in sudo span gedit etc pp
  • Coursera Machine Learning 第二周 quiz Octave/Matlab Tutorial 习题答案

    1 Suppose I first execute the following Octave Matlab commands 1 2
  • C语言random问题

    总 结一下C语言random的用法 xff1a srand xff08 xff08 int xff09 time xff08 NULL xff09 xff09 用于设定随机数种子 rand 100 xff0c 产生 0 99 的随机数 如果
  • java.util.regex.PatternSyntaxException

    在处理字符串用到String replaceAll 这个方法的时候出现了这个异常 Exception in thread 34 main 34 java util regex PatternSyntaxException Dangling
  • Shell 脚本 Debug 方法

    可能有的程序员在对程序调试的时候用printf或者echo将信息挨条打印出来 xff0c 但是这比较麻烦 xff0c 因为在交付的时候还要将这些语句一条条删除 xff0c 下面对shell debug的方法稍微做一个总结 xff1a 1 使
  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action

随机推荐