当前位置:网站首页>九度 1201 -二叉排序数遍历- 二叉排序树「建议收藏」

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

2022-07-07 18:11:00 全栈程序员站长

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

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

#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.cn/116527.html原文链接:https://javaforall.cn

原网站

版权声明
本文为[全栈程序员站长]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/2043119