QQ登录

只需要一步,快速开始

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

一颗很值得玩味的二叉树

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 06:16 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
#include <stdio.h>
; G: ^) t3 c- t& G- g+ g" m& P#include <stdlib.h>
4 d' r# d2 e1 U! T: g#include <malloc.h> % [9 x. {, D! P# P% w0 `

/ o$ e9 I0 H6 Q; X% P* _( U7 @! @" z$ ?" o! k. _- e
<>typedef struct bitnode/ ?& O, s/ p) X' y8 u$ {, G" ]
{
# v* s1 k$ z4 G/ j  U, T    char data;
3 r, R& w4 }. ]. Z# X/ g& _, n8 b    struct bitnode *lchild, *rchild;
' ?% _8 U8 z1 a# Z& \( H% N9 \' k1 ?}bitnode, *bitree;</P>
! d( D- i1 l5 `3 h<>void createbitree(t,n). x, _8 A; y( ?
bitnode ** t;$ J& @2 u$ y/ ?$ ~# g6 h( z" g
int *n;
3 d% y; k* P% i$ K{
" X) d  Q2 B' W( a    char x;4 Z. U  J. M4 g- d; ]2 I3 i( a
    bitnode *q;
3 b& p- l8 d5 O# y* O* }    *n=*n+1;6 X9 G1 T$ Q2 ]0 X* V
    printf("\n Input  %d  DATA:",*n);. A- C8 z3 i7 t4 s8 r
    x=getchar();
3 M/ m0 i" L, v    if(x!='\n')" j; N( u3 @- P9 i3 v! P2 _- r
       getchar();! x# t# A$ S) w* P) Z3 B( w
    if (x=='\n')
, [1 C3 }( C% z2 s8 R4 R" T3 G       return;1 U& I% r" R% d
    q=(bitnode*)malloc(sizeof(bitnode));7 A0 P' ^9 F- m- T4 f- X& u
    q-&gt;data=x;$ ~/ T# k4 w6 Z  k  v  J2 j) f7 W
    q-&gt;lchild=NULL;- f+ v: n8 z( @& o: S8 B8 Q
    q-&gt;rchild=NULL;) A2 n9 R% C% t" W+ t: c
    *t=q;4 l6 F- f# F) X# h1 u& z5 M% @
    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);; l" U' K0 k7 y/ v/ v" f5 y
    createbitree(&amp;q-&gt;lchild,n);
6 \7 u4 X2 O8 a5 J4 m4 m* ]2 o    createbitree(&amp;q-&gt;rchild,n);
4 P4 d0 C9 l  U9 n' C- `' \+ C. T    return;
& a' p5 L& Q5 F) j$ \' ?}</P>& z5 \) j4 L" B; y% t5 Y$ _  U; p
<>void visit(e)
( D. A0 `" D9 n7 W4 ^  {! |& Cbitnode *e;
: R! \& O/ j/ |7 n' S3 f8 {9 ]{6 L9 b9 C# M$ P. f! z
    printf("  Address:  %o,  Data:  %c,  Left Pointer:  %o,  Right Pointer:  %o\n",e,e-&gt;data,e-&gt;lchild,e-&gt;rchild);
9 X) T4 X' P6 f5 |9 }7 g}</P>
& P5 q4 _! p  C* S; L" ?<>void preordertraverse(t)2 m7 A" L9 s, B
bitnode *t;2 x. R" D3 _- N* j; a) {
{
* J& T8 \5 B6 H% d& |    if(t)) Y- m) H  @" o' b' h
    {7 c9 K! R& ~$ ^5 ]
        visit(t);6 J( b0 r: l( G7 E5 f6 T. c
        preordertraverse(t-&gt;lchild);
" A% ~6 ^- K; L8 N        preordertraverse(t-&gt;rchild);; D' J/ `# U( T7 @4 i
        return ;
- f" C& }9 o+ |7 R$ d8 g    }. K  g9 f/ m1 o# S9 q) a
    else, @7 \% C/ M6 c/ }! v
       return ;$ H( |; Q: ~, @, s# Y. X7 ~; \
}</P>
+ K+ l) m  O& R% H) M( s6 F2 l<>void countleaf(t,c)! c& {( _2 F2 G
bitnode *t;
1 Y1 p' V) M- Aint *c;
2 c, d/ Q% Q- e% T) M{3 A5 i4 r9 I6 R7 ]5 o% _
    if(t!=NULL)# O9 Y6 e7 a% {- e, A. w
    {+ N) `9 l# }. _
        if (t-&gt;lchild==NULL &amp;&amp; t-&gt;rchild==NULL)
$ B$ n1 v+ n, Q1 L; i        {
9 x! S3 L% m# Q" O% d0 I            *c=*c+1;
5 \0 F% f% B! ~' s3 C8 P  _) |        }5 v8 b- I: K  \1 M
        countleaf(t-&gt;lchild,c);% H3 B$ C- `  j7 D! f5 W! U
        countleaf(t-&gt;rchild,c);: I( j# ]. L. a8 ]2 j
    }
  [( D* M6 B4 @9 d    return;
" }2 D( N  y( i! Z6 w6 a6 D}</P>: B0 v$ u! }: A2 O. S, y: T
<>int treehigh(t)5 I7 d0 `& ^9 m( ~, r
bitnode *t;! e" V2 H: Y; y7 V! }( P
{, e- S' |' f1 `5 ~2 h6 f* B6 R2 c7 X3 k
    int lh,rh,h;
" H. j* {) d# J1 \7 y/ R, f    if(t==NULL)& [; U- P; U  _
       h=0;- L, ]1 V# a' v) z# ]3 ?
    else
- S7 S* {# @( w+ Q& t- Y: ]    {
3 u6 y/ ^6 P4 C/ A( G        lh=treehigh(t-&gt;lchild);. f' Y2 s4 P! Y" {
        rh=treehigh(t-&gt;rchild);
) W$ c1 x, {! ^  r- [        h=(lh&gt;rh ? lh:rh)+1;* g8 i4 {6 n$ ?2 [5 S
    }2 I% D3 g, L9 V. \: A6 {
    return h;  |9 k' D+ ]/ g% S$ B
}</P>
8 ~0 E6 u" w& a3 T. ^& {+ Z<>main()0 {( Y. b/ Y8 n2 k$ {$ _7 D
{/ k6 j& |% Q# P/ L5 o8 \" g' H
    bitnode *t; int count=0;+ o- Y5 Z4 f' A6 q
    int n=0;
5 _$ F3 o( a* q7 S    printf("\n Please input TREE Data:\n");
/ f8 F0 b% i( `( Q" B* Q    createbitree(&amp;t,&amp;n);& z+ k2 X' u4 O3 S, T% {# o+ F
    printf("\n This is TREE Struct: \n");
( {% m% \+ ^1 A    preordertraverse(t);
" S- ?( e1 H  I& _4 w: ?    countleaf(t,&amp;count);* x3 g( I! _, U: c; N
    printf("\n This TREE has %d leaves    ",count);
: S! V) R3 F$ b# }, P* X2 W1 X; {    printf(",High of The TREE is: %d\n",treehigh(t));
) N$ u* L' ^! T7 m: q( b}</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-4-21 04:40 , Processed in 0.349813 second(s), 74 queries .

回顶部