首页 > 其他分享 >SDUTOJ 2128 树结构练习——排序二叉树的中序遍历

SDUTOJ 2128 树结构练习——排序二叉树的中序遍历

时间:2023-04-20 22:43:15浏览次数:48  
标签:node struct 树结构 int 2128 二叉树 include root


树结构练习——排序二叉树的中序遍历


Time Limit: 1000MS Memory limit: 65536K


题目描述


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



 


输入


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



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



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


输出


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



 


示例输入


1 2 2 1 20


示例输出


2 1 20


提示


 


来源


 赵利强


示例程序


 题目已经给出排序二叉树是什么意思了,只需要按照题目要求建树就可以。








示例代码:






#include<iostream>
 #include<algorithm>
 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>
 #include<string>


 using namespace std;


 struct node
 {
     int data;
     struct node *left,*right;
 };


 int n;


 struct node *creat(struct node *&root,int m)
 {
     if(root == NULL)
     {
         root = (struct node*)malloc(sizeof(struct node));
         root->left = NULL;
         root->right = NULL;
         root->data = m;
     }
     else
     {
         if(m < root->data)
         {
             creat(root->left,m);
         }
         else
         {
             creat(root->right,m);
         }
     }
 }
 int flag = 0;
 void zhongxu(struct node *root)
 {
     if(root!=NULL)
     {
         zhongxu(root->left);
         if(flag == 0)
         {
             flag = 1;
             printf("%d",root->data);


         }
         else
         {
             printf(" %d",root->data);
         }


         zhongxu(root->right);
     }
 }


 int main()
 {
     while(scanf("%d",&n)!=EOF)
     {
         flag = 0;
         int m;
         struct node *root = NULL;
         for(int i=0;i<n;i++)
         {
             scanf("%d",&m);
             creat(root,m);
         }
         zhongxu(root);
         printf("\n");
     }
     return 0;
 }

标签:node,struct,树结构,int,2128,二叉树,include,root
From: https://blog.51cto.com/u_14834528/6210788

相关文章

  • 全二叉树
    全二叉树(CompleteBinaryTree)是一种特殊的二叉树,它的所有叶子节点都在同一层上,而且除了最后一层之外,其它层的节点数都达到了最大值,最后一层的节点从左到右依次排列。具有n个节点的完全二叉树,其节点编号从1到n,按照从上到下、从左到右的顺序进行编号,则有以下性质:如果一个节点的......
  • 浅谈全局平衡二叉树
    首先,这个是GBT,不是GPT。其次,那个是ChatGPT,不是ChatGBT。原理我们先考虑一个经典的问题:单点修树上最大权独立集问题,也就是LuoguP4719【模板】"动态DP"&动态树分治。使用树剖维护矩阵可以做到\(O(n\log^2n)\)的复杂度,可以通过\(10^5\)的数据。那我们能不能把这个问题优化......
  • LeetCode Top100: 翻转二叉树(python)
    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[] 提示:树中节点数目范围在 [0,100] 内-100<=Node.val<=100实......
  • LeetCode Top 100: 二叉树的直径 (python)
     给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例:给定二叉树1/\23/\45返回 3,它的长度是路径[4,2,1,3]......
  • 4月18日leetcode二叉树几种遍历方式的非递归和递归
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例1:二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完......
  • 23-4-18--二叉树--完全二叉树的层序遍历
    一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:......
  • 节点与其祖先之间的最大差值(树,二叉树,深度优先搜索)
    1、节点与其祖先之间的最大差值(难度中等)给定二叉树的根节点root,找出存在于不同节点A和B之间的最大值V,其中V=|A.val-B.val|,且A是B的祖先。(如果A的任何子节点之一为B,或者A的任何子节点是B的祖先,那么我们认为A是B的祖先)/***Definitionforabinary......
  • 二叉树前序遍历,中序遍历,后序遍历的统一模板写法【递归和非递归】
    二叉树有三种深度遍历的方式,分别是前序,中序和后序,分别对应LeetCode的144,94,145三道题目。三种遍历方式的递归写法都差不多,也比较容易,相信大家都已经烂熟于心了。但是非递归写法,目前还有很多不同的写法,比如循环条件,有的用栈是否为空,有的用指针是否指向NULL。这样比较混乱的形式,不利于......
  • 4月17日leetcode二叉树的层序遍历II
    给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)(出自力扣)这个昨天的二叉树的层序遍历有所不同:需要将从后往前层序遍历二叉树,其实很简单,只需要用vector的逆置函数,将vector中的vector逆置即可。这里顺便......
  • LeetCode Top100: 二叉树的最大深度 (python)
     给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。 以下是Python代码实现:cl......