QQ登录

只需要一步,快速开始

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

一颗很值得玩味的二叉树

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 06:16 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include <stdio.h>
1 ?2 t3 Z1 `) z6 T; o/ u#include <stdlib.h>
0 t9 D( W7 p; y& n% h9 f' }#include <malloc.h>
: p8 u2 q; t2 g( w' v1 H+ Y* v3 g" O2 r: r) [& Z
: y" n5 K* ^, [& f; m5 P. `1 s
<>typedef struct bitnode& }. P  i0 ], u6 D& D* M
{
% D6 u; @$ {% ?( n    char data;
# V& @/ n. ]3 O/ q/ G    struct bitnode *lchild, *rchild;
; v5 L' u! r+ c& y# b/ ]}bitnode, *bitree;</P>1 j; L( I5 d) b, H# ?0 K: T
<>void createbitree(t,n)
3 R. m: a, |. ~2 E7 dbitnode ** t;; P5 `) O3 H2 x# D
int *n;; g6 s9 _5 Z9 l2 q7 V) V
{
3 n' Z- ]$ C* U" F% v: M0 E$ v7 e2 u  u    char x;" k2 W1 H" j& P, o1 C6 u  @
    bitnode *q;
0 l1 {$ D8 q/ W% M6 ?- s4 R9 V# e    *n=*n+1;9 E3 J$ {: Y. @7 G' ^. v( B
    printf("\n Input  %d  DATA:",*n);8 P# I& {* v8 r4 a# a5 b
    x=getchar();
5 s& f8 j8 N9 T4 S    if(x!='\n')# ~& L# p* a0 l& E: l# s% b2 S
       getchar();: H% d! }$ s- U5 g, d" g
    if (x=='\n')
2 O8 z, \* Q* j8 G+ V       return;2 F4 ]" t/ V5 j) l. I
    q=(bitnode*)malloc(sizeof(bitnode));
! \) E1 N8 @0 e: S1 |9 p: f, ~8 A    q-&gt;data=x;
# M( L8 Y8 Z8 C6 _( Q3 W' U    q-&gt;lchild=NULL;
! z" a6 }& C" ?- K0 ~$ Q    q-&gt;rchild=NULL;
7 r4 f7 H; t$ h0 L8 |    *t=q;/ w1 d; H& ^: w5 v4 B
    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);5 p/ C* b. h" }5 a+ c
    createbitree(&amp;q-&gt;lchild,n);
, b/ Z! x: c+ e- L    createbitree(&amp;q-&gt;rchild,n);
" v4 P) b( J8 @1 i- h    return;& E5 x: M) v9 f8 o
}</P>
" ^2 {9 }2 v" \<>void visit(e)$ r1 t0 m) N0 `+ [
bitnode *e;# k. @0 S' }; V5 M0 P  ~
{! {+ ?9 L6 r0 N1 N& ?5 x
    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);
/ g7 T+ O1 J" v3 z' k* S1 Z2 e}</P>  H% E2 Z* d# c0 x* v! d/ M( {! i
<>void preordertraverse(t)2 G/ d! x+ ?& C7 j( W6 @
bitnode *t;
& H: Z4 b" a) ?6 C; o0 P8 ^{
* z1 Y& Y) ^& n  s    if(t)
5 Y6 X, U% w5 c4 E/ K! f$ m    {& k( `3 ?' n% j8 S2 ^7 @" W1 v
        visit(t);
1 @8 U7 Y0 K: C* G" ]0 i. p        preordertraverse(t-&gt;lchild);
) R8 p, c( p2 P0 c& D        preordertraverse(t-&gt;rchild);
- Y# I  [  I5 ]0 u+ G, P        return ;1 m* c$ n) ~  t4 z) ]
    }
  ~' C, i0 u7 P. V  x5 i3 h! D$ i    else0 r- B0 g" g1 Y6 K) n
       return ;- H' y2 l) b% c0 P$ ^  s0 R
}</P>+ i% c; V" U( O/ f6 I! i
<>void countleaf(t,c)
, d( ~& b4 W" ^5 h+ ?bitnode *t;4 Z, K& X, r- I
int *c;, {: P( A3 y5 `8 J. p
{  p, q& ?8 b8 r, c8 D2 A
    if(t!=NULL)
: e* t& L, e6 ?5 k& Z. T    {2 E$ t  _9 j5 e- W. A1 X: x8 z
        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL)
: u9 K( o1 Y9 N/ s* k        {
; R. b4 `2 r& Q' `# Z; @            *c=*c+1;
- u* L7 L4 E/ F0 t        }# W' z8 o2 j& n
        countleaf(t-&gt;lchild,c);& N. Z" ~7 Z* D! k% y6 n6 v
        countleaf(t-&gt;rchild,c);
3 a+ q% V9 V9 H6 N# s- E$ T) `    }
1 X+ [9 [, I7 z1 E) M    return;2 n  e6 Z% [; T! A5 n
}</P>
& e4 k4 f( w/ G$ D<>int treehigh(t); V. L0 ?& K. ?9 M" g3 D/ G  c
bitnode *t;
. p6 x2 l  I7 t8 I{
) l! w) \" R+ |2 d3 K    int lh,rh,h;' ?2 o: e0 J$ i1 V; T5 d
    if(t==NULL)
7 G; }4 s6 ]" I  D; m: M       h=0;
$ H2 [, ]! Y9 X* x  u) T. P2 Y    else
5 ^$ R- T1 z6 k- }+ C    {" g" J. o  |; }
        lh=treehigh(t-&gt;lchild);1 R2 ?  F( U3 G2 ]  D. A, @9 l
        rh=treehigh(t-&gt;rchild);
% Z* d  y1 H. s* P/ E  D# V9 H5 \3 q        h=(lh&gt;rh ? lh:rh)+1;
* x8 {! ?- v/ o% e4 L! p    }& P* _& q1 H- H3 H
    return h;5 [. ]7 d4 P" `' d7 s  H
}</P>
2 S4 W! Q8 n6 i* R<>main()
+ |/ B6 R% K, E$ I. `0 U: _- I{
; \' v( h, [$ k6 b% C    bitnode *t; int count=0;- r7 [" b: `0 H5 r9 ~* p& t
    int n=0;
/ d' ^0 G6 |  t    printf("\n Please input TREE Data:\n");
$ P( H5 k' W. \8 v, l" a1 z* Y    createbitree(&amp;t,&amp;n);. t  d  X8 _% n% O6 S+ L
    printf("\n This is TREE Struct: \n");
) O$ K, }$ ]) A  Q, F4 T    preordertraverse(t);6 I- }4 g; @6 o- C4 J
    countleaf(t,&amp;count);7 s( O# A: d6 j& J0 \/ N9 T
    printf("\n This TREE has %d leaves    ",count);
3 e8 Y$ B+ a3 e) b; X    printf(",High of The TREE is: %d\n",treehigh(t));
8 u7 ^5 o- f$ `4 C- c0 h' L}</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-23 11:56 , Processed in 0.815838 second(s), 74 queries .

回顶部