QQ登录

只需要一步,快速开始

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

一颗很值得玩味的二叉树

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 06:16 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include <stdio.h>
8 \( x0 w; |/ Y+ p1 e5 C, _5 ]#include <stdlib.h>4 l, t  Y9 ^3 N* B6 R& i* K# I6 D
#include <malloc.h>
0 Z8 h8 ^1 s4 d- u/ l# U$ ^& w2 G5 q" f( G. C8 C* c& c& o+ _

7 r( `! ?' z8 N9 Z. g: l: r# y<>typedef struct bitnode* ]: q7 x9 T' [% h! G! N! e
{
( u3 Z9 Y7 @: A+ M, y" N5 ^    char data;
6 z& T/ h( M5 j& d6 Q    struct bitnode *lchild, *rchild;$ F. ?  g' [+ q; `
}bitnode, *bitree;</P>; K  u3 n, i: C; f9 E  k
<>void createbitree(t,n)# c  B- G& p' k8 x1 ]6 j
bitnode ** t;- J* u8 x8 K7 h: t) p2 X( s
int *n;
  Q6 V" _) Y) b2 f{
! u# T' }7 Y" o* C& g% w" c    char x;
: U* [. m# E3 J% R$ \# y    bitnode *q;/ W/ |' v) @5 k, X0 Z- m6 s
    *n=*n+1;: O# {* C- v& S0 j0 e
    printf("\n Input  %d  DATA:",*n);
% u# i. L" n) s9 T* ?/ O    x=getchar();& \) J( O" r2 q
    if(x!='\n')6 O; e, p7 Y$ b$ u( a
       getchar();/ M9 W2 d2 E' c( u2 \6 j- Q! H; |
    if (x=='\n')
9 i! }2 f' Y2 V. W# q; O       return;# k. ]9 |+ n( t- H( y) k
    q=(bitnode*)malloc(sizeof(bitnode));
+ p5 L7 U) [! k+ Z    q-&gt;data=x;
* v* R  y& }$ D0 ?) L+ I8 N" s9 h    q-&gt;lchild=NULL;' N! a7 p" w- d
    q-&gt;rchild=NULL;, |8 A" d9 I8 h7 f- n
    *t=q;
! s3 {; ^  B9 e% p4 D* J  Z- s    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 y: ?: w4 H- M' z% c& `1 p# F
    createbitree(&amp;q-&gt;lchild,n);# v" V4 m  P, U: a- A
    createbitree(&amp;q-&gt;rchild,n);+ l0 v4 \; Y1 X. z
    return;
5 J& l" Q. u, @! f}</P>
4 `2 J- y) e+ \<>void visit(e)
8 G& K" e7 ?( N+ p2 lbitnode *e;
# h& q4 H+ X  U{
; E7 W. B/ C8 x    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);
  X( I: O) L" M0 U1 f* B}</P>6 |* ^" @" L! O0 r$ m
<>void preordertraverse(t)
  O9 i6 d: `, e4 N0 gbitnode *t;
. b% f4 B: h1 X{
& k* L4 R$ v* b! u    if(t)
! z6 H1 ?0 c0 e: d" Y# N    {" s+ F9 e( l1 u/ P
        visit(t);+ b0 T3 F- O( v" U9 o: m+ T
        preordertraverse(t-&gt;lchild);
+ \+ K, f+ c! H) _5 [+ r3 O& O3 q! w& ]        preordertraverse(t-&gt;rchild);
3 F; V9 V: Y" K4 ]: i        return ;. O8 W0 ~+ Q. A) E  j
    }
+ K  S& Q' ^" ~5 s9 j3 c    else
! |* e. s# R  G9 Q! I       return ;; D- E+ k9 R  w- i; ~% O8 R
}</P>
/ w" Z) z$ {7 t( P<>void countleaf(t,c); o1 X+ @: p) S: a/ F- H& i
bitnode *t;
1 i$ E1 O& z, ^- h* d% u% nint *c;
: u4 ?) x& _5 e" t3 L* u4 E9 `{5 O; R7 x& G4 ~+ |) ]
    if(t!=NULL)
, x) l# ~6 o2 d: L    {1 D7 O3 d) I" v1 {4 `( Y4 h/ e
        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL): F% W" ?2 {. Z. j6 k! U3 s
        {7 C3 j% z' S: p3 W6 C" f
            *c=*c+1;+ Z' P# E0 Y% F, K3 J  a7 n6 C
        }
' }+ [3 l: [, D& \( F9 F        countleaf(t-&gt;lchild,c);
" G. l0 j& J2 b6 q5 o        countleaf(t-&gt;rchild,c);! @/ s. E- m) U! l/ g8 d( o
    }
# |7 @, t2 |  t9 F    return;
# h6 l& C* J; m/ V- \, I2 s}</P>8 w2 i' i6 @5 _7 {! `
<>int treehigh(t). y& ^5 p2 o$ O$ [
bitnode *t;( C% A% q6 e; L6 u' @0 E% K; h% {
{
8 L1 ]' q6 V8 {    int lh,rh,h;2 W1 {' {+ A$ L0 g  d) }
    if(t==NULL)2 N' U* F6 u5 ?$ T# B
       h=0;
: a: A5 g7 H3 l4 ^    else* e# Y5 X4 Y2 z4 \1 p0 d
    {
( o. B% \$ R% y+ @3 h  k2 s: u+ W* P        lh=treehigh(t-&gt;lchild);
9 ]/ ]* v+ M& I3 P        rh=treehigh(t-&gt;rchild);& r, _) |( w5 I& X& X
        h=(lh&gt;rh ? lh:rh)+1;
- I% _# }3 j% }3 Z- J    }' N4 F1 @, V# N6 C3 X
    return h;7 o! _" w2 D3 f# h' D, T4 E' S, P
}</P>
0 l8 L  g1 v+ m/ I) ?6 f! w<>main()
0 Y" W+ p; e0 ]) n8 T{
. C5 b& u( z1 s! i$ G    bitnode *t; int count=0;
1 N' p9 w- e+ o3 j9 s# r- S    int n=0;6 x* @$ _  ^" }2 u8 C  s8 R
    printf("\n Please input TREE Data:\n");
! {- \2 ?4 Z6 x, V! X    createbitree(&amp;t,&amp;n);- A9 T4 S- z# n5 v& G0 P4 F
    printf("\n This is TREE Struct: \n");( Q- s7 r9 _+ [4 Q/ C, d  Z) m: w& L+ n
    preordertraverse(t);. c# G; S4 ~" U8 d6 ^
    countleaf(t,&amp;count);
- V8 F8 ^+ Y  O6 ~5 }) h2 R    printf("\n This TREE has %d leaves    ",count);
/ P1 W2 D& @4 a" c    printf(",High of The TREE is: %d\n",treehigh(t));
" W& I, q, e3 a6 |3 k- {3 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-23 08:32 , Processed in 3.575754 second(s), 75 queries .

回顶部