排序二叉树的建立与中序遍历

排序二叉树的建立与中序遍历树结构练习——排序二叉树的中序遍历TimeLimit:1000msMemorylimit:65536K有疑问?点这里^_^题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
树结构练习——排序二叉树的中序遍历

Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。

输入

输入包含多组数据,每组数据格式如下。

第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)

第二行包含n个整数,保证每个整数在int范围之内。

输出

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。

示例输入

1

2

2

1 20

示例输出

2

1 20

<pre name="code" class="cpp"># include <stdio.h>
# include <stdlib.h>
typedef struct node
{
    int data;
    struct node *l,*r;
} Node;
int inorder[1000];//记录中序遍历的节点值
int k;//节点个数
void InOrderTraverse(Node*root);
Node* create_BST(Node*root,int key);
int main()
{
    int i,n,key;
    Node *root;
    while((scanf("%d",&n))!=EOF)
    {
        root = NULL;// 开始为空树
        for(i = 0;i< n;i++)
        {
            scanf("%d",&key);
            root = create_BST(root,key);
        }
        k = 0;
        InOrderTraverse(root);
        for(i = 0;i < k;i++)
        {
            if(i == k-1)
                printf("%d\n",inorder[i]);
            else
                printf("%d ",inorder[i]);
        }
    }
}
Node* create_BST(Node*root,int key)
{
     if(root == NULL) // 树空
     {
         root = (Node*)malloc(sizeof(Node));
         root->data = key;
         root->l = NULL;
         root->r = NULL;
     }
     else
     {
         /*(1).每个节点中包含有一个关键值
           (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值
           (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值
        */
         if(root->data > key) // 如果根的值大于key 那就递归查找二叉树的左子树
            root->l = create_BST(root->l,key);
         else
            root->r = create_BST(root->r,key);
     }
     return root;
}

void InOrderTraverse(Node*root)
{
    if(root == NULL)
        return;
    else
    {
        InOrderTraverse(root->l);
        //printf("%d ",root->data);
        inorder[k++] = root->data;
        InOrderTraverse(root->r);
    }


}



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160019.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 批处理中的多种注释方法[通俗易懂]

    批处理中的多种注释方法[通俗易懂]有些时候,我们需要在批处理中使用大段的注释,即连续的注释超过2行。那么,如何实现他呢?方法有很多种,本文仅列举其中的一部分。㈠、使用rem注意:注释中不能使用重定向符和管道符;当回显处于打开是时,

    2022年7月1日
    35
  • android软件开发工具(WiFi破解)

    做为一个多年奋战在Android应用开发一线的程序员来说,程序调试的苦是不言而喻的,在过去的很长一段时间里,我们如果要调试Android应用只能通过USB数据线,一头连着手机,一头联着电脑,不敢让手机离开电脑半步。、         曾经有一段时间,我总是担心天天这样高强度的调试别把手机的USB口给磨坏了。也许有朋友问了,那怎么不用模拟器呢?事实上,不是不想用,而是电脑上开个模似器可能需

    2022年4月13日
    57
  • JAVA基础—类—11.29

    JAVA基础—类—11.29

    2021年10月6日
    30
  • java中sqrt函数的详解[通俗易懂]

    java中sqrt函数的详解[通俗易懂]一、原理:牛顿迭代法具体解释:牛顿迭代法求平方根那我们怎么用牛顿迭代法呢?首先要明白,牛顿迭代法求的是函数和X轴的交点的横坐标,也就是我们说的根1)那么第一步就是构建曲线了。假设有一个数c,我们求它的平方根x,那么有一个等式,x^2=c;挪到一边就是求f= x^2-c的根x2)带入上面的公式也就是 3)既然是个迭代,那么

    2022年5月7日
    76
  • 测试用例设计——等价类划分法「建议收藏」

    测试用例设计——等价类划分法「建议收藏」一、分析问题如果我们需要对下面的这个两位数加法器设计测试用例,在测试了1+1,1+2,(-1)+1和(-1)+2之后,是否有必要测试1+3,1+4,1+(-3)和1+(-4)呢?如果不对两位数加法器程序进行穷举测试,我们能否放心的认为其他所有的参数组合都是正确的呢?可想而知,我们不可能输入这么多的组合进行测试。那么,如果不可能输入这些组合进行测试,是否会担心会遗漏测试中会存在bug呢?…

    2022年10月18日
    2
  • 中国知网爬虫

    中国知网爬虫中国知网爬虫一、知网介绍提起中国知网,如果你曾经写过论文,那么基本上都会与中国知网打交道,因为写一篇论文必然面临着各种查重,当然翟博士除外。但是,本次重点不在于写论文跟查重上,而在于我们要爬取知网上一些论文的数据,什么样的数据呢?我们举一个例子来说,在知网上,搜索论文的方式有很多种,但是对于专业人士来说,一般都会使用高级检索,因为直接去查找作者的话,容易查找到很多重名作者,所以我们本次的爬…

    2022年7月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号