数学建模社区-数学中国

标题: 一颗很值得玩味的二叉树 [打印本页]

作者: 韩冰    时间: 2004-10-4 06:16
标题: 一颗很值得玩味的二叉树
#include <stdio.h>- ~! M$ z9 C( b0 L/ c0 g+ G
#include <stdlib.h>
1 n+ Q. |5 v0 Z3 C: V" ]6 Q#include <malloc.h>
: M* v  i. T" y' q( A$ e6 |6 l; ?! c5 D7 m

  R. A+ N5 B# R! b: p$ \6 q8 t<>typedef struct bitnode
% G. t1 I7 p& J, J3 z' t8 }' y{
: f* ?% U0 ~/ c! }" h( W    char data;: z* a5 f. b4 g5 n- h. Y, \
    struct bitnode *lchild, *rchild;
5 Z2 F5 ^& B5 B' b3 D( y}bitnode, *bitree;</P>
; D+ X' q2 v! X- N/ g7 g<>void createbitree(t,n). E& u. \, z+ a1 k$ f3 g
bitnode ** t;
! c8 i! G, H- L6 u. `  b, L5 ?int *n;
6 P" ]. p  k) s" f{1 y; d. e# _- E. s( M
    char x;
/ `( W$ W3 p/ a7 q8 L  n6 m& h    bitnode *q;
3 a: W  R# `. L4 \) F    *n=*n+1;
# f( h' c% l) G; }9 g' z    printf("\n Input  %d  DATA:",*n);8 F, a+ k5 n" {4 ~3 _0 T; V
    x=getchar();
+ T" i3 u# i" B6 z! a$ b7 }3 e    if(x!='\n')
6 o4 o) t0 y4 Z: r       getchar();
$ r6 H" `( T% l7 ^  p    if (x=='\n')/ t2 ?* z: ?: ?  H2 s: [+ d/ U
       return;5 F7 O1 X$ u  L: n2 S2 h$ ]
    q=(bitnode*)malloc(sizeof(bitnode));
& o+ f% b3 R$ i+ n% i1 p* a" ~" R    q-&gt;data=x;$ R% b/ V5 ]( Y3 c' O* R9 X
    q-&gt;lchild=NULL;
, |; i. f1 I- l* h8 P; S    q-&gt;rchild=NULL;
; s0 D# G! K, T% W4 A, ^6 G    *t=q;
8 L  [! i8 F$ ?3 H' D( o    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);) p/ _+ G, k6 p
    createbitree(&amp;q-&gt;lchild,n);
0 u$ ~2 g+ l$ _- {& l    createbitree(&amp;q-&gt;rchild,n);
: f5 S! P1 N! Z% y  S    return;
. ]. _7 i! Y4 ?' h' t+ V) I}</P>. x, Z1 C3 D8 B
<>void visit(e)
9 m/ K3 O6 g* `8 I4 K& U' Vbitnode *e;! x7 l, f# j1 L' H
{
9 |  Q& Y+ J4 I9 ^) e+ Z; M    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);
. s; M( v$ p; f; I6 a- q# ^}</P>2 l, P* Y7 r: d, D6 Z
<>void preordertraverse(t)
1 I* P6 S( |2 d2 ?bitnode *t;5 a4 f; A7 B! ^3 V
{
8 l  @! |* O& ]9 ]/ F& ~3 Q    if(t)0 ]( o% I! A0 h) T- u( p
    {
$ R+ @: k) A/ \        visit(t);
1 R- o# T$ m  |3 l$ M) B# P        preordertraverse(t-&gt;lchild);3 R" R: u* T1 b) j( X6 }
        preordertraverse(t-&gt;rchild);
( K# k+ k- g$ o- r        return ;  c2 t0 j6 v/ Z: h! w; H0 k
    }
' o& O, B; e7 E1 ?% l' P% j9 }    else6 I* p3 K9 e& l5 j# d+ A* L
       return ;1 U+ P( H; n. d3 W
}</P>: |, r5 Z: c5 x  V# M" n- t
<>void countleaf(t,c)
$ h! a3 p. @& G$ E. Sbitnode *t;
  U+ X3 s* y8 s8 [int *c;
/ N7 L6 w' k9 e& V5 ?{$ C# G, ^, N% D/ P0 H, x9 v* G9 e
    if(t!=NULL). n! U) y+ s4 E  ~0 a! C4 U/ O
    {6 l8 ^5 c3 c' s+ M0 K7 K9 v
        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL), m" @) k) L! T) U. @
        {
# J; b3 I7 U( Y7 F7 S            *c=*c+1;
. H" z5 _  G/ c% U4 q4 x5 O        }( U+ l4 [4 S1 ]' @( ^, \6 a4 P8 c- X
        countleaf(t-&gt;lchild,c);7 c, [7 o6 I0 D# k
        countleaf(t-&gt;rchild,c);
$ {$ s$ j+ @! ~# h7 q* Y' F, H    }
) R' P+ c+ f* t. b7 [* n    return;
# Q. ~5 G  y( e7 J: [% _# w}</P>9 A  {* |) s3 t" R& F
<>int treehigh(t)- V. j, w; z+ s) ^8 `. `7 J
bitnode *t;
/ v  b) |8 J% y8 I$ a/ S% i{) H0 Q' H, m, H+ n4 E
    int lh,rh,h;# u0 ~3 |  u6 a/ E& A
    if(t==NULL)6 P( D& @' h- {' ~) W( r  D1 N
       h=0;( h6 @& R5 [. Y/ X
    else" R6 l* \3 M& c! }3 }& k% M; n7 S
    {# A; ]& Z3 L- B& J- P9 o: b, ]. F$ A$ f
        lh=treehigh(t-&gt;lchild);2 H) [! E8 V, y* A( V
        rh=treehigh(t-&gt;rchild);5 S2 o( w: r8 K: p5 S
        h=(lh&gt;rh ? lh:rh)+1;
. a" i& Q/ b2 g: i" v/ f    }$ j+ t! n8 h  d, _
    return h;
5 U, G! i# Z: C6 C}</P>
: O+ h9 F# L9 ~: D4 \2 W. m% d<>main()$ I" d2 [# i; O* B' ~, [3 N2 E
{
3 Q" A% U2 w/ c/ M  n! ?    bitnode *t; int count=0;3 v5 k9 S+ Q. s
    int n=0;
. m: V5 Y$ R+ M8 x! j" @; T* D    printf("\n Please input TREE Data:\n");# Z( _4 T, p: j0 j
    createbitree(&amp;t,&amp;n);' C5 N# x: }: N. w. r6 Y  C
    printf("\n This is TREE Struct: \n");( v! h2 _# A9 X( J
    preordertraverse(t);/ d% o% h! M1 F! ^% J+ A
    countleaf(t,&amp;count);
  w' @+ w  F3 _: F; X  _    printf("\n This TREE has %d leaves    ",count);/ v1 ?2 Z( N0 O
    printf(",High of The TREE is: %d\n",treehigh(t));" \9 F+ m8 T- T2 E/ J
}</P>
作者: zoologist    时间: 2004-10-25 10:07
连注释都没有,怎么看!
作者: xShandow    时间: 2004-11-3 13:51
<>不错啊。% j" q1 k+ Y, i' n
</P>
作者: realyoyy    时间: 2004-11-7 20:20
就是阿  什么说明都没有 变量名也不标准




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5