排序二叉树的凹入表示及中序遍历

建立并中序遍历一个排序二叉树

排序二叉树是指左子树的所有节点的值均小于它根节点的值,右子树的所有节点的值均大于它根节点的值,如下图是一棵排序二叉树

输入:
输入有一行,表示若干个要排序的数,输入0时停止

输出
二叉树的凹入表示
和二叉树的中序遍历序列

sample:
input:
56 78 34 89 12 35 67 77 22 57 0

output:
        12
            22
    34
        35
56
            57
        67
            77
    78
        89

12 22 34 35 56 57 67 77 78 89

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 42 168 35 101 270 125 79 259 263 165 6 246 182 62 192 296 243 28 37 0 ↵
以文本方式显示
  1.         6↵
  2.             28↵
  3.     35↵
  4.         37↵
  5. 42↵
  6.                 62↵
  7.             79↵
  8.         101↵
  9.             125↵
  10.                 165↵
  11.     168↵
  12.                     182↵
  13.                         192↵
  14.                             243↵
  15.                 246↵
  16.             259↵
  17.                 263↵
  18.         270↵
  19.             296↵
  20.  6 28 35 37 42 62 79 101 125 165 168 182 192 243 246 259 263 270 296↵
无限制64M0
测试用例 2以文本方式显示
  1. 147 106 291 130 71 51 7 202 94 249 132 24 85 0 ↵
以文本方式显示
  1.                 7↵
  2.                     24↵
  3.             51↵
  4.         71↵
  5.                 85↵
  6.             94↵
  7.     106↵
  8.         130↵
  9.             132↵
  10. 147↵
  11.         202↵
  12.             249↵
  13.     291↵
  14.  7 24 51 71 85 94 106 130 132 147 202 249 291↵
无限制64M0

 

#include<stdio.h>  
#include<stdlib.h>  
  
typedef struct node{  
    int v,depth;  
    struct node *lc,*rc;  
}tnode;   
  
void buildtree(tnode* p,int i,int d)  
{  
    d++;  
    if(i<p->v)  
    {  
        if(p->lc==NULL)  
        {  
            p->lc=(tnode*)malloc(sizeof(tnode));  
            p->lc->v=i;  
            p->lc->depth=d;  
            p->lc->lc=p->lc->rc=NULL;  
            return;  
        }  
        else  
        {  
            buildtree(p->lc,i,d);  
        }  
    }  
    else  
    {  
        if(p->rc==NULL)  
        {  
            p->rc=(tnode*)malloc(sizeof(tnode));  
            p->rc->v=i;  
            p->rc->depth=d;  
            p->rc->lc=p->rc->rc=NULL;  
            return;  
        }  
        else  
        {  
            buildtree(p->rc,i,d);  
        }  
    }  
    return;  
}  
  
void traverseinorder(tnode *p)  
{  
    if(p==NULL) return;  
    traverseinorder(p->lc);  
    printf(" %d",p->v);  
    traverseinorder(p->rc);  
    return;  
}  
  
void concaveprint(tnode *p)  
{  
    if(p==NULL) return;  
    concaveprint(p->lc);  
    for(int j=0;j<p->depth;++j)   printf("    ");  
    printf("%d\n",p->v);  
    concaveprint(p->rc);  
    return;  
}  
int main(){  
    tnode *head;  
    int i;  
    scanf("%d",&i);  
    head=(tnode*)malloc(sizeof(tnode));  
    head->v=i;  
    head->depth=0;  
    head->lc=head->rc=NULL;  
    while(1)  
    {  
        scanf("%d",&i);  
        if(!i) break;  
        buildtree(head,i,0);  
    }  
    concaveprint(head);  
    printf("\n");   
    traverseinorder(head);  
    printf("\n");  
}  

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值