QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2562|回复: 3
打印 上一主题 下一主题

一颗很值得玩味的二叉树

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 06:16 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include <stdio.h>' q! v$ D2 d  j8 v# Z! L
#include <stdlib.h>
9 T/ D1 f7 u7 ]0 ~8 _#include <malloc.h> ' j$ q4 x$ J/ w, i5 M

$ u) f; w2 n1 S( l; k0 d+ z( L7 |4 V/ o, l; P
<>typedef struct bitnode$ m( }) k, B5 e- ~+ e, f) h+ j
{
! f0 T3 E2 I; d! Z7 D    char data;# C. U. S+ D- ~2 g% w/ U$ k$ u) \9 e
    struct bitnode *lchild, *rchild;
& |( j! O" W7 d' ^  ?}bitnode, *bitree;</P>
' k& d! N3 s$ k) |/ f/ f<>void createbitree(t,n)
9 a- m# x9 O" Q# x' i$ tbitnode ** t;9 A0 D! Q+ c0 x( E3 h7 E4 j
int *n;
. Y2 M0 n0 Q' _% k) K* {{" g8 g+ I& g7 f# G( J* z
    char x;
) s$ C- t  s' r: d3 g/ d0 [    bitnode *q;3 S( l# r$ V. K% E* {- S, [* X; D
    *n=*n+1;- ]7 \6 j% J2 H; R' ]
    printf("\n Input  %d  DATA:",*n);) }( ~! \% r: t+ I- g8 Y
    x=getchar();
6 M+ O8 q# d: G/ v3 x1 B' a    if(x!='\n')! D' C6 R0 B) f) }3 a; I
       getchar();
" u9 H& E: L* P. l    if (x=='\n')
3 p( z  x+ n; G% X3 G* j+ E- Y       return;
9 v8 g# B# N3 V3 G: x( v    q=(bitnode*)malloc(sizeof(bitnode));/ G1 ~. _2 h1 S, t
    q-&gt;data=x;$ I9 o  G  l% i! ^- ]1 ^4 c
    q-&gt;lchild=NULL;# h5 H; ]& s/ a, u
    q-&gt;rchild=NULL;3 Q- l# ]5 X6 U
    *t=q;9 u  T/ f$ _8 d% ]* @
    printf("This Address is:%o,Data is:%c,\n Left Pointer is:%o,Right Pointer is:  %o",q,q-&gt;data,q-&gt;lchild,q-&gt;rchild);# ]1 q3 y* G' q" h: f
    createbitree(&amp;q-&gt;lchild,n);
+ t+ n( S  A+ y    createbitree(&amp;q-&gt;rchild,n);) ^, r: v8 x1 O' q# Y
    return;
( x  ]" f) `% f* _7 Q7 E( J" O}</P>
; N+ {$ N# c4 q! T7 M1 |; v<>void visit(e)
0 v  p$ o- g# I/ `) C2 w" L& Zbitnode *e;
8 ~9 ^: e1 h" X- f& V{& S' i+ O- D6 J# e% k
    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);5 Z  |. S  H5 I! }. w. d
}</P>8 L0 t  r7 D. m; x$ M, `
<>void preordertraverse(t)( T* y0 ]* i, ^; j- x
bitnode *t;
8 q: R0 G. A+ n2 S5 V1 M{/ q7 V0 j7 H. l$ n5 X" ]
    if(t)
+ d' F# E0 d8 {: Q" G9 t    {; e  {4 [. P. \' F- a  C
        visit(t);
) A" S4 F2 V$ C  G        preordertraverse(t-&gt;lchild);* Z+ Q  |0 E* s( ~7 w
        preordertraverse(t-&gt;rchild);
7 h* r) B+ t' ]8 _/ H        return ;& U& p, \. o6 I0 T: h& Z
    }) r/ v) p, `1 [2 a6 s, m" o0 X
    else
5 H. }$ ^& d0 |! N. C/ A6 p/ l       return ;
4 u$ R; A" E* b6 b+ M7 G  q+ M+ f}</P>
) N* A, ^1 r$ Y5 N' X8 f<>void countleaf(t,c)& Q1 J1 Y; A2 B# ~' [
bitnode *t;
# P& Z5 e) `, f  Bint *c;. K9 S- D/ x8 h! R
{
5 n; e: _% x; U# n3 p2 z4 ?7 \. ]    if(t!=NULL)
$ E; t0 R' W4 `6 i% V    {
5 g% }: y1 O: ?4 W8 p        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL)
" |: q5 `9 u1 p# ?- t        {
. ?* \; G* U+ Q* p* T; g5 X  Z# I+ |% r            *c=*c+1;
, @" m: n# y- a$ ?        }) G% Y, E, D- `# y* V- t& s
        countleaf(t-&gt;lchild,c);# |7 y) E2 _  C% ?
        countleaf(t-&gt;rchild,c);  U8 J6 A/ V. c2 I
    }0 w; ]( r& N, S. V( s7 P
    return;3 ~# D; p, g3 n* C/ V
}</P>* |: ?" N# w* R# P: t, g) i2 b$ b$ x$ p" E
<>int treehigh(t)  [" K+ }# u2 ^+ m: G
bitnode *t;$ K6 ]6 T- Y8 |, h+ Y
{
1 N+ O& Y8 `' t3 ]0 p* P    int lh,rh,h;' M( l4 Z) n9 s6 E4 S( `4 r9 W+ ~
    if(t==NULL)
' r0 Y7 I# s+ M* s       h=0;) E* G4 G; s9 K2 A. k5 s9 P( `
    else7 ]. A2 e, T$ Z' G' \
    {5 W! E/ f# m1 ~: ]& f
        lh=treehigh(t-&gt;lchild);
/ t" {3 L9 G' O9 x2 _! V0 b- @        rh=treehigh(t-&gt;rchild);
$ D9 ]9 U' Z6 U  o) t- _& Y        h=(lh&gt;rh ? lh:rh)+1;4 g4 n! i5 E6 \% y6 M
    }
1 K/ ~- k6 |: p    return h;* f- P: I" d% t4 @% F# n
}</P>
$ [$ b5 L3 Z* k# v  x<>main()0 X, H$ O9 E) J) l/ M. f; p
{. C$ @$ T6 r+ P7 Q0 v. \: X. M$ y. m
    bitnode *t; int count=0;" `7 r6 K" r4 j) x8 h7 B9 r
    int n=0;7 {' P6 R& J/ X% o2 i4 L9 t
    printf("\n Please input TREE Data:\n");
0 b3 s  d' p: i. Z    createbitree(&amp;t,&amp;n);- d$ d. ~1 P. J: l. v5 Y8 N4 W
    printf("\n This is TREE Struct: \n");- o+ P% s) k) `$ ~0 a
    preordertraverse(t);* ~4 K" `" x- w+ b( ~
    countleaf(t,&amp;count);
. w% s7 }5 D% N+ |' Q  T    printf("\n This TREE has %d leaves    ",count);: q7 l$ {7 X. G# T2 F, m3 |
    printf(",High of The TREE is: %d\n",treehigh(t));
' I( x$ H" e3 w0 ]7 x( T: m}</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
xShandow        

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

回复

使用道具 举报

zoologist        

0

主题

0

听众

16

积分

升级  11.58%

该用户从未签到

新人进步奖

回复

使用道具 举报

realyoyy        

1

主题

2

听众

38

积分

升级  34.74%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-26 08:32 , Processed in 0.444706 second(s), 74 queries .

回顶部