九度 1201 -二叉排序数遍历- 二叉排序树「建议收藏」

九度 1201 -二叉排序数遍历- 二叉排序树

大家好,又见面了,我是全栈君。

这个是道正统的树构建和遍历题。一開始还想用数组构建取代一下水过去,可是发现不行,仅仅好老老实实的用指针了。二叉排序树和遍历方法假设不清楚定义的话。最好去看看数据结构书复习下。

#include<stdio.h>

struct node{
    node *l;
    node *r;
    int val;
    node(int a):val(a),l(NULL),r(NULL){};
};
node *root;
int n;
void qian(node *p){
    printf("%d ",p->val);
    if(p->l!=NULL)qian(p->l);
    if(p->r!=NULL)qian(p->r);
}
void zhong(node *p){
    if(p->l!=NULL)zhong(p->l);
    printf("%d ",p->val);
    if(p->r!=NULL)zhong(p->r);
}
void hou(node *p){
    if(p->l!=NULL)hou(p->l);
    if(p->r!=NULL)hou(p->r);
    printf("%d ",p->val);
}
 
int main(){
     
    int val;
    node *p;
    while(~scanf("%d",&n)){
        root=NULL;
        for(int i=0;i<n;i++){
            scanf("%d",&val);
            if(i==0){
                root=new node(val);
                continue;
            }
            p=root;
            while(1){
                if(val==p->val)break;
                else if(val<p->val){
                    if(p->l==NULL){
                        p->l=new node(val);
                        break;
                    }
                    else{
                        p=p->l;continue;
                    }
                }
                else if(val>p->val){
                    if(p->r==NULL){
                        p->r=new node(val);
                        break;
                    }
                    else{
                        p=p->r;continue;
                    }
                }
            }
        }   
        qian(root);
        printf("\n");
        zhong(root);
        printf("\n");
        hou(root);
        printf("\n");
    }
    return 0;
}

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

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

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


相关推荐

  • 【剑指offer】二叉搜索树的后序遍历序列

    【剑指offer】二叉搜索树的后序遍历序列

    2021年11月30日
    47
  • “自动修复”无法修复你的电脑(电脑黑屏按哪三个键)

    早上起来已开机,就看到电脑在自动修复,顿时感觉要出事,果不其然就一直这样,安全模式也经不来,后多方查找资料,不重装系统,不进pe完美将其解决。首先点击高级选项,疑难解答,高级选项,命令提示符。不出意外的话就进入黑框框了。bcdbootc:\windows/lzh-cn然后回车,电脑会重启。重启之后发现提示无法加载系统按F1进入之后选微软键盘,进入到命令行界面,删除这个sys文…

    2022年4月12日
    123
  • stun协议笔记一(stun格式简介)「建议收藏」

    stun协议笔记一(stun格式简介)「建议收藏」一、stun协议格式1、STUN报文头1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。2)STUNMessageType字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。响应类型分为成功和出错两种,用来帮助快速处理STUN…

    2022年7月17日
    12
  • 在Ubuntu上使用FreeFileSync同步文件

    在Ubuntu上使用FreeFileSync同步文件FreeFileSync可以在Windows,Linux,macOS上面运行。本文使用操作系统是Ubuntu18.04。安装FreeFileSync下载程序,并解压。$wgethttps://freefilesync.org/download/FreeFileSync_11.0_Linux.tar.gz$tarxvfFreeFileSync_11.0_Linux.tar.gz解压之后进入FreeFileSync文件夹,就可以双击运行程序了。我们可以创建一个启动器,这样我们可以从桌面运

    2022年5月16日
    43
  • eureka集群高可用配置[通俗易懂]

    eureka集群高可用配置[通俗易懂]网上讲这个东西的很多,抄来抄去的,大部分类似,多数没讲明白为什么那么配置。譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配区别在哪里;eureka的客户端添加service-url时,是不是需要把所有的eureka的server地址都写上,还是只需要写一个server就可以了(因为server之间已经相互注册了)?如果写上了所…

    2022年6月14日
    55
  • qt录制屏幕_iphone录屏转gif

    qt录制屏幕_iphone录屏转gif一、说明:不断地截取选中的区域,然后将其制作成gif动图。二、效果图:1、可设置要录制屏幕的宽高,支持右下角直接拉动改变.2、可设置变宽的宽度3、可设置录屏控件的背景颜色4、可设置录制的帧数5、录制区域可自由拖动选择三、代码:1、main.cpp#pragmaexecution_character_set(“utf-8”)#include”gifwidget.h”#include<QApplication>#include<QTe

    2022年9月20日
    4

发表回复

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

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