QQ登录

只需要一步,快速开始

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

一颗很值得玩味的二叉树

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 06:16 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include <stdio.h>
. N" i: ?5 w" G3 @7 V#include <stdlib.h>( D4 h0 e, ]! [0 X( M0 o  e9 x; {+ s
#include <malloc.h>   e! P+ d4 u' e" o) ^! m  N& ^6 q
# W& L+ W" o2 j* ]# a7 x( N

: d4 F! e" ]' D2 b<>typedef struct bitnode2 D3 f0 O7 A; Z/ A* y
{+ A# S% X7 m4 P/ c* W, X
    char data;# A2 T7 k+ f; {* H' I. d
    struct bitnode *lchild, *rchild;
* ~6 q' S) `3 u}bitnode, *bitree;</P>
, w  S% x- B* f! a9 n; B<>void createbitree(t,n); T# f8 U, W& y+ r
bitnode ** t;- `% O' W/ p' K" Y
int *n;
- V* r8 B$ {, \  K/ k{4 \6 ]2 P; t2 w* E4 s
    char x;* }) s* w8 A8 ^+ X. d5 E* m2 o! v6 b' B
    bitnode *q;
6 w# q; ^! D1 N2 Q3 S4 C8 u    *n=*n+1;' _3 n# f9 X) E8 o7 R+ }
    printf("\n Input  %d  DATA:",*n);
3 K; R0 S& H, w; \    x=getchar();& l  F$ P% }6 @  G- j7 z* O, g) E
    if(x!='\n'), H" _; C9 g2 C1 x. x
       getchar();- B4 l& ]+ H! v5 m' [
    if (x=='\n')5 C. M3 ~" ]$ s  T$ k
       return;9 X; G- H+ p8 @: J$ |" L
    q=(bitnode*)malloc(sizeof(bitnode));
) k- V; ^0 y9 Z    q-&gt;data=x;
' B) p6 m6 C3 s: O2 D  R7 K    q-&gt;lchild=NULL;
8 ~& g. _% c' Y. z! A# \    q-&gt;rchild=NULL;
( M0 h8 A8 H; m& w    *t=q;
' k' s6 W6 c- s: W    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);
% d7 z0 J# n6 L/ v1 y5 x4 W  D    createbitree(&amp;q-&gt;lchild,n);3 V) X5 S8 J& o, g$ v
    createbitree(&amp;q-&gt;rchild,n);6 ^1 F  g$ ]0 C' s) d
    return;
+ f# L. U. W7 T" j}</P>
- C# u" Y4 _. `' \# R1 R9 a1 [<>void visit(e)
' p  r# Q2 b3 O2 A9 ubitnode *e;6 a& l1 F" V' L' P0 ?7 H) C
{6 m* l) d2 a) x+ u- Z
    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);
9 e. {5 \/ A. }2 l7 T0 A}</P>' D$ W/ w, K1 B" j
<>void preordertraverse(t)
5 Z' G* u4 q( N" `% K1 O' N$ fbitnode *t;
2 N% {/ G  k. L{8 d7 \" s  v) b3 o- x" H0 L+ J
    if(t)1 i! q  E9 _7 J/ y9 Z" v5 l; C
    {/ @, ~4 z/ p6 H0 J
        visit(t);
. ^3 I9 |) u0 Z9 f4 f        preordertraverse(t-&gt;lchild);9 @( ]  r$ C' F  }; q5 e# Y1 @
        preordertraverse(t-&gt;rchild);
, {$ e9 A0 _5 B4 @! A        return ;/ x; l' V& f, k8 u! ]
    }- ]2 S" e) F( F5 O) n1 }8 B
    else- g8 j2 a  e# t( Z& r
       return ;
, \% o) U4 B; z5 X6 P+ ^}</P>; R: i% _. l8 @+ ]  S2 i+ |
<>void countleaf(t,c)
% [8 g3 ]3 `  h! G5 u) A- qbitnode *t;
7 J  ]' W- h( Sint *c;- @( \9 j, Z1 |3 m( o5 z
{
; x1 v0 ~# u  o9 n2 ~    if(t!=NULL)& P2 k) |" w; |9 a
    {  \" y0 i* |' x) |
        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL)
0 X; G) a& o& r        {
7 A2 K0 ~0 G# q- H. R. {            *c=*c+1;
2 H2 J: H1 Q& L0 {- n        }
6 ]  H  c+ G. I* Y* C        countleaf(t-&gt;lchild,c);
( d9 u! [- ]- a& R( w1 R+ K! H& w        countleaf(t-&gt;rchild,c);: X, `3 {! I+ a% l" X% V6 h* ^
    }
+ j) F2 F, ^5 c; ]7 B    return;
+ u0 p- {8 D2 }  q) W. z3 n9 G- K}</P>* A9 C% w, V" V
<>int treehigh(t)
0 i0 ?( n/ Y& k3 n! X. ubitnode *t;
9 B- `. K$ @8 k- f{4 s, H  E. C/ ]) }6 H8 T# W; E9 n
    int lh,rh,h;/ }2 {3 K) {/ B7 C" s3 S
    if(t==NULL): }7 p! Y+ J* p" T4 ?+ ]
       h=0;
9 n! l5 D+ q( s6 U1 `* p# m: h    else" }& I: Z/ O, a1 R$ N3 P
    {
! g' h9 p! v, j7 I+ ~( J6 T        lh=treehigh(t-&gt;lchild);* S/ _* T3 D) E& L, K& \
        rh=treehigh(t-&gt;rchild);
* s: J" Q, [* z4 ]( R+ Z        h=(lh&gt;rh ? lh:rh)+1;
, ]4 i- T7 m* J: `* ^    }
* M) k9 H7 A5 b- v8 H    return h;
( {! q. m5 r! V4 ~}</P>6 G2 X7 K1 s$ q+ U
<>main()
0 ?7 M) R7 v7 ]' H" E! q{7 C: o/ D& I" N, \& \
    bitnode *t; int count=0;; s! R$ q# g+ z! L5 C) l, Q
    int n=0;
& `* v% Y% ^( S# T8 l# l# {    printf("\n Please input TREE Data:\n");- \7 v! @+ C/ [2 b3 B8 b: }
    createbitree(&amp;t,&amp;n);: ]7 e# w- b0 _8 W6 j9 `  _
    printf("\n This is TREE Struct: \n");5 L/ a6 P. R* ]& [  X
    preordertraverse(t);
# F5 P6 B$ Y* n: E! M4 o    countleaf(t,&amp;count);" ~+ v% r5 I" w% z0 u& I4 W7 `
    printf("\n This TREE has %d leaves    ",count);
/ m% K0 d0 \: E9 }& s: s$ b1 n& m    printf(",High of The TREE is: %d\n",treehigh(t));
- V! C4 g0 O$ e5 {2 r1 s}</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-6-11 19:23 , Processed in 0.355104 second(s), 75 queries .

回顶部