QQ登录

只需要一步,快速开始

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

【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-15 11:55 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历( h. E* c" M& r) l# C+ _

    & ^: b# @: M# W8 g; i[color=rgba(0, 0, 0, 0.749019607843137)]文章目录
    7 t$ ?% C' V( |[color=rgba(0, 0, 0, 0.749019607843137)]前言$ j8 J' v0 J9 s: C/ ~
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式( [0 T/ w4 c( h( q
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    ' J+ o1 ?* v1 s+ ]) s[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历8 a5 x# |! G, v
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    ) ]8 ^( @' c( K: m4 W: ?3 u% k[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    $ Y# e. i% z. r[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度2 H7 b* G% Z$ ]5 v# x1 Z7 p  T
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数: h" k7 E( L0 k& q# s6 ~% J" Z
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找, k* l* \3 T% w. |# `- N( y
    [color=rgba(0, 0, 0, 0.749019607843137)]前言
    6 Z& q+ V% }. U# X3 v* |+ ^[color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。$ B( O1 @3 r  p% j
    [color=rgba(0, 0, 0, 0.749019607843137)]
    5 w3 p+ ~+ M  U1 G
    0 g+ U7 q8 L. u( |9 t+ C' l3 I8 {7 h
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式/ b( G$ J& I: R. S2 J$ A; _  _
    [color=rgba(0, 0, 0, 0.749019607843137)]
      ?' x) D' J! W7 Z7 T4 j

    0 {0 m7 a) i/ [8 h2 r[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:
    7 X" Y& \7 B- P' n6 _6 X[color=rgba(0, 0, 0, 0.749019607843137)]
    1 X; Z. X5 {) W/ X
    0 ], R9 h3 |% g. }+ o
    [color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树
    ' O) X, g2 I* `) j[color=rgba(0, 0, 0, 0.749019607843137)]
    . X+ ^) a( R4 G
    ( c9 C. Z, g3 g" D6 R7 S: p, B* X) ?( k
    [color=rgba(0, 0, 0, 0.749019607843137)]( E2 h6 o; m) ^9 V: \0 S3 g- g( t
    8 F, N# v' W# Y: e
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树
    ( j4 n/ k( ~4 [3 H% U" x% _" N[color=rgba(0, 0, 0, 0.749019607843137)]
    ' _7 ?3 k4 U' l

    1 q/ f/ h+ C9 m& P3 `! y# c# w5 n[color=rgba(0, 0, 0, 0.749019607843137)]6 D6 x3 i$ K, s% t* f
    ; y6 X7 F" v1 u% M' K
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根
    5 v9 k6 B, a# {* z5 v6 p[color=rgba(0, 0, 0, 0.749019607843137)]9 Q$ Y+ i* U  N; B: @1 S8 T/ b
    * s: [% c: |% f8 C0 ^  B
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ! W- u$ {3 U+ F+ d% q  q4 z
    8 e; d: v# c8 k- \4 Z, t  }
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    9 U$ N" w- d% x7 ?[color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之- ^6 J7 I! [' E" J: b4 Q' z6 p4 |
    [color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;1 C  H1 B/ u% b6 J5 I1 s& b2 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;4 W$ c$ P& j# W$ C
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);
    ' W. o6 p( F) h# A$ ~[color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);
    # {3 T+ Y* E# |! A[color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);3 z5 B6 r6 a. m% S# V
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);1 U9 |: ^" X: p6 v& ?) H5 [- z
    [color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。8 Z  }7 o( K4 S& p8 R% w7 S" ~3 F' r
    [color=rgba(0, 0, 0, 0.749019607843137)]
    1 k) }# e( H' O" ?8 _
    # ]6 ^) e8 k. v" A+ P
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历2 |2 n( j8 t4 D
    [color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    ( v- O$ E( d  ^. f, K[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>
    0 {/ J5 b: o( q, G' k+ X0 Q[color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>+ ]* N' }, s+ N# u4 i* r+ R# _# |
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>
    % ^! Q7 L3 b; x: B2 P7 o. J4 v  K[color=rgba(0, 0, 0, 0.749019607843137)]
    ( r, B6 T5 U) r' c' e
    . t1 F6 [& s% d; z: i9 t
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;3 K: s3 v$ q8 e3 o* `; N
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ! u. d0 A1 X: m  m1 m& I7 a* |
    # I! I1 M4 d  ~! h, t& e
    [color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体* M4 a' T0 a  q3 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    ) R) ]; O) i& @1 H) n' p! l$ Y6 k3 G[color=rgba(0, 0, 0, 0.749019607843137)]{  l0 G. m/ z9 O5 l
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;% t( l" Q! L' W8 |
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;* o- j, g8 C6 h( B! P- b
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;
    6 U2 ]: d+ S4 ~2 m( v) Y) Y[color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;+ _" z% N0 _% ~7 ]6 s" @
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 ~9 W2 y" o3 h" j. m! x

    9 K7 v7 A5 ]/ l- Z: f, P[color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历
    3 M! @5 l, V9 w8 ][color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    4 J, @2 J) [5 t5 I, L[color=rgba(0, 0, 0, 0.749019607843137)]{
    " `6 i" q  @& J9 J% F[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)8 Z  j0 N3 k3 q9 ]0 @/ X$ t
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    : m: N# A# \: Y+ l9 \[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");6 y7 _7 P1 w2 L7 G/ a
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;& S) r$ N2 W4 z& U
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    ; `9 u) a# P' J9 Z' M3 N[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    2 K) L+ \' s, w) M[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);1 @  _: R8 g- E! C' S  @
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);0 k/ Y, }; g3 Z% V, i9 H! j
    [color=rgba(0, 0, 0, 0.749019607843137)]}
      W  N0 C' V+ U4 P! m7 u[color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历
    $ U; @( s6 U" r4 [/ B- ?) j. F[color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)
    ' D$ v# j' B  t7 \* D5 {: R8 C[color=rgba(0, 0, 0, 0.749019607843137)]{
    8 {% o' m1 W$ l+ c9 G/ @5 N' }- q0 f  k[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)9 h% L' ]0 f* y* v3 Z5 e3 d) G
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    1 `" a( w; l& c: F  c[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");- v! T) `2 m4 S
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    % u2 Y# E9 T/ T! e. ?, l+ s0 L( O[color=rgba(0, 0, 0, 0.749019607843137)]        }
      W! q8 P/ I2 S/ @2 ^' e[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);' o' e; v6 ~# ?5 V: {3 y
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);/ b* m9 ~4 N' h* i9 Q. J  C
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);
    8 w$ J; L6 ]2 t" |1 I; t[color=rgba(0, 0, 0, 0.749019607843137)]}
    . \" O6 W) k$ A; |[color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历0 M) l% Z/ z- d; T1 I
    [color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)4 Z; L+ L0 c7 [+ o+ U8 W" n
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    9 T0 W7 I- y$ y% ?1 Z8 u! L[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)) L$ j4 P7 l; r2 E2 N
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    6 Y+ O* R5 \* a3 f$ T7 F, d[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    & s+ d+ T; G8 r) D6 @[color=rgba(0, 0, 0, 0.749019607843137)]                return;
    6 V1 u- R4 Q+ Z1 F% j[color=rgba(0, 0, 0, 0.749019607843137)]        }5 W" n( D2 t% X/ V7 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);
    9 R" u' f* r- L2 U[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);4 `& i; J1 o( T) [& Q2 f/ z
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);4 n0 T, J1 {! z3 X; x* d
    [color=rgba(0, 0, 0, 0.749019607843137)]}& f$ e( ~) d# X, e1 B
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    , ]* n4 t' v. ?. B- r0 k' W. ]9 W[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()+ R' U$ t, V. }5 c
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    * q% H" x6 M% P1 Z! y[color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间$ O9 S: ~/ m* Q1 H* d7 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));' v# ]$ ]; A7 p  m. u7 d1 k. y
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);
      ]+ d& G+ q; P[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));
    # B7 u% `5 [; Z# g9 @[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);
    * d! F" C/ s  S& Y) d[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));
    : I# p$ a& M& k/ ~- }1 r* M& Y+ G[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);6 `: o& D6 Y8 }7 K" O& ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));4 ]6 _7 S/ I: a
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);9 \1 Y6 H# `5 s- d, F; Q9 z5 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));0 D  W( k' W, O# M( C1 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);0 y3 W& t) L' Q7 \
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));. y& u; z4 C" V- H$ A0 A. y
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);2 Y& [/ H' }9 C  b, T+ e
    [color=rgba(0, 0, 0, 0.749019607843137)]
    . M5 ]; z* P6 }) O
    4 t$ l9 ?$ }2 X' F) m3 `, n
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;6 E% J( H9 k+ P$ |4 m+ c* U
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;# ]/ F1 D: \* b& J  l' w1 f
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;
    ! F) C1 `# p- b2 k$ E7 p- h[color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;
    0 `8 e# h5 j, M) I4 ]6 I' e2 T[color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;
    * z- y1 I: w8 V1 {[color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;& a' U% p2 Q4 r9 P5 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]) s% z( f) _! ]+ x

    # @! i1 z" O1 C+ b1 L3 y[color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;
    1 n( S+ f1 c' n[color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;
    $ m1 k9 D5 n. W7 [  A- v- p  o. W' [[color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;( G/ P2 m3 W7 t1 P- L5 \
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;, o2 b* m. t( Y) e6 K* H
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;& m  E9 X: f! u$ G
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;
    9 S* L4 Y2 ^' p( W[color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;! n5 c: y* o% f& r+ I7 B5 [# |
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;' m( m- y; N0 O$ D+ U; _
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;9 _! }% F9 b+ L
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;
      W! [) |: V% Z0 }- L& H[color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;, e5 {  K8 M; S. r. [; R
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;# P9 E# W' d! E3 u. Z0 y* j
    [color=rgba(0, 0, 0, 0.749019607843137)]
    * W) I, d8 |- C. w( \) E" f
    5 {! ]0 o/ [; B' s7 k# S
    [color=rgba(0, 0, 0, 0.749019607843137)]        return n1;6 ]: u. E$ b+ T) N! m
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    3 E, c0 T4 z# ^+ ?4 Y; z  @[color=rgba(0, 0, 0, 0.749019607843137)]. g0 {0 S4 K* {# ^
      y2 n; j. C4 R6 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]int main()
    " u& S6 ^8 w1 o4 {0 A) W/ r[color=rgba(0, 0, 0, 0.749019607843137)]{
    ) ]/ t3 t/ N( M[color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
    4 d# `1 w0 G6 k4 \6 r' o- s) H3 b3 D1 e[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();
    $ F" l. p( Q0 t[color=rgba(0, 0, 0, 0.749019607843137)]
    1 \( X2 n: [6 w+ l  r8 @5 D$ R

    . q) w, o* }6 e' Y* u[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    ) w, V7 {' `. K9 Q) R6 Z+ \3 \4 \[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");" {; l3 z  o9 {  p
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    3 i% r6 {& a5 n0 I[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");; {2 }5 R4 O8 V9 p
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历
    * B* N/ _& Y4 t[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");# ]) h, _& ]: o& d9 \% D
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    4 M# `8 q4 l: t8 {3 z/ T  p[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");7 P: m: @1 Z% v3 K; h$ t6 u! b/ V
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历/ S: B7 Z9 I$ y' ^
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");
    ; R2 X0 g3 h3 W1 r" q[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    , R; t6 t, g; b5 V! U[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    9 G( Z/ n' x+ i! ?5 r- T[color=rgba(0, 0, 0, 0.749019607843137)]. _) [* i- B$ i, U9 G* Z  g

    / m2 ?6 a1 r$ j[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;8 V  U& E9 w! {- v# [$ S( w
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    . S" m1 A& O& ~/ x0 g[color=rgba(0, 0, 0, 0.749019607843137)]1* ^$ g6 p; b/ F
    [color=rgba(0, 0, 0, 0.749019607843137)]2+ Z* n" I6 n) U; L
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    ! r) V6 `/ q- Z% _[color=rgba(0, 0, 0, 0.749019607843137)]4+ o6 {  f$ V( C- u# E! T6 p
    [color=rgba(0, 0, 0, 0.749019607843137)]59 J) ?2 D# _' S4 D/ B. P- o9 f' o+ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    + g9 o5 Y4 U8 O" P[color=rgba(0, 0, 0, 0.749019607843137)]7
    7 B& p( T: S" m9 |* _[color=rgba(0, 0, 0, 0.749019607843137)]8
    , Y% c$ ]  [! l4 p( v& }- D[color=rgba(0, 0, 0, 0.749019607843137)]9
    ) Y1 V8 x8 t- h- g" x% ~" w[color=rgba(0, 0, 0, 0.749019607843137)]10
    / A) A2 j' q# q' G+ O9 z$ q[color=rgba(0, 0, 0, 0.749019607843137)]11
    * }; ^7 \6 k" n3 P[color=rgba(0, 0, 0, 0.749019607843137)]12: Y3 c" j: {1 z; T# e
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    4 W9 w9 a; s! l[color=rgba(0, 0, 0, 0.749019607843137)]14$ i; N: ]( m( Y2 k' v( ?( j
    [color=rgba(0, 0, 0, 0.749019607843137)]15
    7 A7 l0 @( Z/ z% i4 ?" `1 G[color=rgba(0, 0, 0, 0.749019607843137)]16
    4 c3 T* \5 I" V" z8 V- s[color=rgba(0, 0, 0, 0.749019607843137)]17
    : Z3 }, M; n2 K[color=rgba(0, 0, 0, 0.749019607843137)]187 O; e0 v/ X$ j1 m
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    ' D- a" h: l0 a3 R3 [7 Y[color=rgba(0, 0, 0, 0.749019607843137)]20# u( @. }' i( ]5 t8 Z- t0 x, F1 `5 S
    [color=rgba(0, 0, 0, 0.749019607843137)]21+ M$ I, g+ f7 f. k+ e: c) |* T2 O) z
    [color=rgba(0, 0, 0, 0.749019607843137)]22* R) `& w/ A7 _5 [
    [color=rgba(0, 0, 0, 0.749019607843137)]23
    7 D( u, c8 j! J" [# x+ x[color=rgba(0, 0, 0, 0.749019607843137)]24
    ) t  x, g/ S+ p( @. a0 l$ V[color=rgba(0, 0, 0, 0.749019607843137)]25
    1 k8 Z; c; q& Q' ^9 ?$ I1 t, e[color=rgba(0, 0, 0, 0.749019607843137)]26# r0 b0 ?/ R* ]/ o& K. T
    [color=rgba(0, 0, 0, 0.749019607843137)]277 d: P8 R8 D9 e( t" m) x
    [color=rgba(0, 0, 0, 0.749019607843137)]28, s- O/ ~6 U8 [0 q4 E" H
    [color=rgba(0, 0, 0, 0.749019607843137)]29  D: N0 S1 G& H. N! u6 S2 w
    [color=rgba(0, 0, 0, 0.749019607843137)]30# g5 L9 D5 ~; k7 x
    [color=rgba(0, 0, 0, 0.749019607843137)]31
    + n% |/ @% ?  D) n' {4 y; x! E[color=rgba(0, 0, 0, 0.749019607843137)]32
    / n( {! G6 G; P! @3 p- `[color=rgba(0, 0, 0, 0.749019607843137)]33
    ) ?; W1 [  @: `! P: V[color=rgba(0, 0, 0, 0.749019607843137)]34
    ' u7 E$ v- b  A9 A( u[color=rgba(0, 0, 0, 0.749019607843137)]35
    7 p& N% S- n7 L! x! Q7 N7 U$ x[color=rgba(0, 0, 0, 0.749019607843137)]36
    7 r& l& f, J0 Y/ k! q[color=rgba(0, 0, 0, 0.749019607843137)]373 f9 x  R8 P( D7 X8 K+ _) o
    [color=rgba(0, 0, 0, 0.749019607843137)]383 Q$ C" A6 j0 J7 Y: z
    [color=rgba(0, 0, 0, 0.749019607843137)]39$ q- N# p1 \/ K* ]& r) j+ ^. ^+ t6 K
    [color=rgba(0, 0, 0, 0.749019607843137)]40; m2 m' p6 j6 w" B# k# K4 t
    [color=rgba(0, 0, 0, 0.749019607843137)]41
    : Z5 T- W' m# m/ u+ J; d/ D+ f[color=rgba(0, 0, 0, 0.749019607843137)]42
    3 n/ V- ~0 {% i- M[color=rgba(0, 0, 0, 0.749019607843137)]437 X1 i4 q! w$ u# ~& V# v; e
    [color=rgba(0, 0, 0, 0.749019607843137)]44
    3 z$ _2 s& }8 y( y- Z! e[color=rgba(0, 0, 0, 0.749019607843137)]45  |, ~  k0 i) c+ [, P7 x
    [color=rgba(0, 0, 0, 0.749019607843137)]464 f, L8 T/ {+ i$ H( c0 x. M
    [color=rgba(0, 0, 0, 0.749019607843137)]47: X$ t0 h( J8 d" C: w8 p7 p
    [color=rgba(0, 0, 0, 0.749019607843137)]48
    * g% E' f  ^! z0 j6 u( J+ s4 n: b[color=rgba(0, 0, 0, 0.749019607843137)]49: v  J& I8 \5 m$ P7 r* M, {1 }5 a
    [color=rgba(0, 0, 0, 0.749019607843137)]50" X4 `5 p  Z: `, E& K+ @: {
    [color=rgba(0, 0, 0, 0.749019607843137)]514 M+ {5 ~  F. R
    [color=rgba(0, 0, 0, 0.749019607843137)]521 W7 e; S$ s1 w' s4 ~1 l1 B1 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]53# i& q+ {4 |: T  d
    [color=rgba(0, 0, 0, 0.749019607843137)]54
    4 H, k) t: Z  l, K, V3 \  H5 J[color=rgba(0, 0, 0, 0.749019607843137)]55
    ) B* i, F; X/ m  V; p" N[color=rgba(0, 0, 0, 0.749019607843137)]56
    % S# B0 u) m8 w- I9 M. q1 _[color=rgba(0, 0, 0, 0.749019607843137)]57
    7 X) k: W3 Z* l- R% n[color=rgba(0, 0, 0, 0.749019607843137)]58, y5 C8 S9 R# o6 I7 }  G
    [color=rgba(0, 0, 0, 0.749019607843137)]59
    ( W; N) r3 O# p6 ?: v. k, U[color=rgba(0, 0, 0, 0.749019607843137)]602 I$ v! t7 v  x$ S1 t$ O3 d! p8 d
    [color=rgba(0, 0, 0, 0.749019607843137)]61
      V! }9 o. g, P0 E- t5 G5 i; E[color=rgba(0, 0, 0, 0.749019607843137)]62
    , ~3 b7 F. @2 S! G[color=rgba(0, 0, 0, 0.749019607843137)]63" h: f! C" G: F8 t
    [color=rgba(0, 0, 0, 0.749019607843137)]642 X5 v7 a* H9 f
    [color=rgba(0, 0, 0, 0.749019607843137)]65
    / i1 |+ b! I3 a+ l0 G/ O[color=rgba(0, 0, 0, 0.749019607843137)]66
    5 @3 c4 p/ O, Z* U  X[color=rgba(0, 0, 0, 0.749019607843137)]67/ d, @6 i% X+ [* g* ?) V1 d
    [color=rgba(0, 0, 0, 0.749019607843137)]688 S- f4 H! f4 b
    [color=rgba(0, 0, 0, 0.749019607843137)]693 ^5 |; D0 [  g' L+ O1 K- a- X2 l
    [color=rgba(0, 0, 0, 0.749019607843137)]70
      }; F' [, A" H0 c$ q[color=rgba(0, 0, 0, 0.749019607843137)]71
    0 C: H- h  _0 B1 _( G[color=rgba(0, 0, 0, 0.749019607843137)]728 Z1 O: v6 \. H7 i: {
    [color=rgba(0, 0, 0, 0.749019607843137)]73
    1 d3 s$ A4 L' m5 a8 R+ N[color=rgba(0, 0, 0, 0.749019607843137)]74
    9 w; F( Z- V% j) `5 B1 P, b7 a[color=rgba(0, 0, 0, 0.749019607843137)]75
    ; \9 h) }3 t+ R1 j1 U8 Q[color=rgba(0, 0, 0, 0.749019607843137)]764 n7 k# [; g9 v: ]- y8 l: c
    [color=rgba(0, 0, 0, 0.749019607843137)]77
    * b  q+ w1 i, r; o[color=rgba(0, 0, 0, 0.749019607843137)]786 M- ?) Q! L4 g# G
    [color=rgba(0, 0, 0, 0.749019607843137)]79; ]0 j0 Z5 K) d1 H- Y  I
    [color=rgba(0, 0, 0, 0.749019607843137)]80
    / z1 h' G% d. o: m[color=rgba(0, 0, 0, 0.749019607843137)]813 Z5 ~$ o$ t6 i8 _2 R/ I" u# r
    [color=rgba(0, 0, 0, 0.749019607843137)]82' D; ~& D( d( g$ f3 t+ L
    [color=rgba(0, 0, 0, 0.749019607843137)]83
    0 g7 \- }0 |0 ~% `# i$ c7 T[color=rgba(0, 0, 0, 0.749019607843137)]848 t' y( a* L4 Q/ `1 Z$ q2 r
    [color=rgba(0, 0, 0, 0.749019607843137)]85# q9 ]  h$ _9 w. W
    [color=rgba(0, 0, 0, 0.749019607843137)]86
    $ R9 P1 c% C0 W* M; ]: c[color=rgba(0, 0, 0, 0.749019607843137)]87
      B. |& g5 j" \) p% Z6 x- s2 v/ X$ Q[color=rgba(0, 0, 0, 0.749019607843137)]88/ P+ ^, O0 D8 }
    [color=rgba(0, 0, 0, 0.749019607843137)]89- E" f% j; d) ~# o+ }
    [color=rgba(0, 0, 0, 0.749019607843137)]90  D  N0 S2 ^' }$ W
    [color=rgba(0, 0, 0, 0.749019607843137)]91
    . [) g7 n( V  v& ~: Z" n0 o+ y[color=rgba(0, 0, 0, 0.749019607843137)]92
    6 m; h# B' {; O0 q[color=rgba(0, 0, 0, 0.749019607843137)]93+ p( L8 N# ~" p3 i$ V1 X
    [color=rgba(0, 0, 0, 0.749019607843137)]94
      G+ k. \) v+ ^9 O1 C) S* j2 w' _. w[color=rgba(0, 0, 0, 0.749019607843137)]95
    6 L. _2 D) g% y" k: u[color=rgba(0, 0, 0, 0.749019607843137)]96
    9 ]) j- H7 N( k3 z% R: h4 c3 T[color=rgba(0, 0, 0, 0.749019607843137)]97: ?. L% C' e- E7 I( h5 E
    [color=rgba(0, 0, 0, 0.749019607843137)]98
    2 z1 I- ~; d( q% c# B[color=rgba(0, 0, 0, 0.749019607843137)]99: p7 R  I, z: s$ B
    [color=rgba(0, 0, 0, 0.749019607843137)]100
    / U8 E2 x( g; t1 l5 B7 R, Z* [- E[color=rgba(0, 0, 0, 0.749019607843137)]1010 v, V* j( N" B
    [color=rgba(0, 0, 0, 0.749019607843137)]102
    # q7 w# C5 H2 e4 o[color=rgba(0, 0, 0, 0.749019607843137)]103
    ! i/ J% N8 k$ a! P0 H6 f& }[color=rgba(0, 0, 0, 0.749019607843137)]1049 [0 B: b. F. m  M2 Q2 M
    [color=rgba(0, 0, 0, 0.749019607843137)]105/ D& k4 n4 u2 m  l; M; T& |9 u
    [color=rgba(0, 0, 0, 0.749019607843137)]106
      @1 `  Z: R2 a* ?[color=rgba(0, 0, 0, 0.749019607843137)]1074 t% K8 ]! J5 w2 C
    [color=rgba(0, 0, 0, 0.749019607843137)]108
    # w# U9 @: J0 E$ m6 e[color=rgba(0, 0, 0, 0.749019607843137)]109# v/ v% i( B: R6 L4 W1 T
    [color=rgba(0, 0, 0, 0.749019607843137)]110) F' e' t) ~4 ?; A+ v2 U
    [color=rgba(0, 0, 0, 0.749019607843137)]111% l! ~* w2 Y1 i, Q
    [color=rgba(0, 0, 0, 0.749019607843137)]测试结果:
    0 R' M, S" e. O; L[color=rgba(0, 0, 0, 0.749019607843137)]6 s* {# S5 y, p

    6 ^4 Z; @8 V3 h0 X4 p  C7 U7 x[color=rgba(0, 0, 0, 0.749019607843137)]0 H- Y/ Q+ Y! u3 F
    1 |3 Y) n5 C. a  W' R0 K$ e
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小/ ~- q; k! x* P; M9 w. Y! D
    [color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)
    0 s0 |2 f( q& Y! b% K+ I[color=rgba(0, 0, 0, 0.749019607843137)]
    $ r5 }. g  T8 E3 A, u
    3 ?# G# x: ]8 \8 r6 _5 K# j
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小. ]# p2 @5 _, q4 \( j
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量/ ?5 e8 Q, x: g' S2 W' t
    [color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;
    0 `! x) U* ~: K0 F( M& f- U[color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)
    $ O6 B4 n, P3 N[color=rgba(0, 0, 0, 0.749019607843137)]//{
    ' f: U. t$ ~0 T! M, r7 p$ n+ X[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)
    # m7 x* p8 h% I[color=rgba(0, 0, 0, 0.749019607843137)]//        {  x# J: ?0 y, ~2 {2 q1 c; h
    [color=rgba(0, 0, 0, 0.749019607843137)]//                return;- N! ~  d! [/ b, [
    [color=rgba(0, 0, 0, 0.749019607843137)]//        }+ K0 c- T" N2 [% T# Z- j5 C0 E
    [color=rgba(0, 0, 0, 0.749019607843137)]//        count++;
    3 \5 w% ?9 I; \0 c& Z" F5 I[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);
    9 r5 w3 R. Y. s! {; m[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);
    , q+ j" G( h( H+ r[color=rgba(0, 0, 0, 0.749019607843137)]//0 \. h( X3 @4 Q  E6 p' f- q( I
    [color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量6 A" N+ X. ~& [& s1 S
    [color=rgba(0, 0, 0, 0.749019607843137)]//}) r7 x  r' L# |3 E1 t( w+ J
    [color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之
    + F5 B. K5 U4 o& d$ n# j, Z[color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)
      x+ N" Y$ `, C* D+ P, K[color=rgba(0, 0, 0, 0.749019607843137)]{& [$ r6 a+ `6 K% b  b
    [color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;: ]$ o# |$ G  e+ r2 _2 E# H
    [color=rgba(0, 0, 0, 0.749019607843137)]}6 Y& U% F1 O' V. i4 |
    [color=rgba(0, 0, 0, 0.749019607843137)]14 W5 [3 U% `4 T5 R( A1 Q; A' R
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    0 _* f) b# ~0 h1 t8 I% t& q[color=rgba(0, 0, 0, 0.749019607843137)]37 r( k! _  I: }* k5 l! [
    [color=rgba(0, 0, 0, 0.749019607843137)]4  ]! Q! x% }  w- x2 Y# Z: p
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    8 _' M- D4 ]9 G& j[color=rgba(0, 0, 0, 0.749019607843137)]64 \& o9 X8 D% u& c1 i' k4 u0 R
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    4 r7 \- L1 @& Z; ?[color=rgba(0, 0, 0, 0.749019607843137)]8+ {' P5 Y# J* i
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    ) a  Z; q9 G: |+ v+ Z; f[color=rgba(0, 0, 0, 0.749019607843137)]10/ x$ T7 ~0 x4 q7 K. H+ k& y! k# t4 V
    [color=rgba(0, 0, 0, 0.749019607843137)]11" B! `: F* o4 `$ ?" C  E# y4 y
    [color=rgba(0, 0, 0, 0.749019607843137)]12, F3 _5 B) j# y. V! {( N; [$ T
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    & c3 m% j' h1 j3 y1 g, d' q# E- g[color=rgba(0, 0, 0, 0.749019607843137)]14
    5 [' i) p/ O5 E. @  p& o6 b[color=rgba(0, 0, 0, 0.749019607843137)]15
    / L, P2 `# \* ?! O6 r) }3 i[color=rgba(0, 0, 0, 0.749019607843137)]16
    4 l9 J2 I; i! R- z4 @+ j, T[color=rgba(0, 0, 0, 0.749019607843137)]17
    ( P( x" b2 C& r  \. v8 M; T[color=rgba(0, 0, 0, 0.749019607843137)]18" Q/ z1 Z* X+ {6 w( _& i$ L& M1 @
    [color=rgba(0, 0, 0, 0.749019607843137)]19) z( T$ \9 e/ K9 j
    [color=rgba(0, 0, 0, 0.749019607843137)]20- h$ d3 m; U' ^& O
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数% d# W) Y' M1 [5 s
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数" k+ d4 A- p" P$ q! e
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)
    7 |7 R( j; B# {7 }) m. I. |$ v[color=rgba(0, 0, 0, 0.749019607843137)]{
    6 i+ W& E- i! G' g[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点& K1 h4 L; Y) H3 z
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    % f7 e+ Y6 i& `8 u  F/ t[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    9 l, V6 E; J7 _4 \; D4 r+ p$ c# h2 e$ H% u[color=rgba(0, 0, 0, 0.749019607843137)]        }# I, L( n% n0 T- _) K
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空
    6 X! ^8 c% q; a[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)
    9 M' s0 q2 c9 I8 ?! _) g9 _. f6 C[color=rgba(0, 0, 0, 0.749019607843137)]        {
    ! A  {5 U1 `. H! p, z* B[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    0 r3 S$ t3 m5 ?* p: Y8 a[color=rgba(0, 0, 0, 0.749019607843137)]        }
    2 G0 d* R; m* ]' h2 N" I& v[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);; r& h# H. K7 @: a- p! ^
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    # _1 D5 }) ], ^6 j" b7 Q9 C5 ?/ {[color=rgba(0, 0, 0, 0.749019607843137)]15 @4 y9 ?( y" P0 A2 e) ^# R! m
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    7 j7 @4 L8 Q( [& [1 L( U[color=rgba(0, 0, 0, 0.749019607843137)]3
    / Q* s* [7 E4 i6 T0 y[color=rgba(0, 0, 0, 0.749019607843137)]49 s! s& Z. @/ M, Y. b
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    4 K! J1 D* Q8 z[color=rgba(0, 0, 0, 0.749019607843137)]6
    2 K2 o1 i# u1 B; @% W+ |[color=rgba(0, 0, 0, 0.749019607843137)]7( Y8 l& ^- ]) I! u
    [color=rgba(0, 0, 0, 0.749019607843137)]8, O0 l5 ^1 W2 L* i# j/ ~: {
    [color=rgba(0, 0, 0, 0.749019607843137)]9# w& o& n2 U" ]9 |) G) \2 a
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    + s3 T: J+ E% O; S- \6 @[color=rgba(0, 0, 0, 0.749019607843137)]11
    2 u/ W+ p+ a: a( p) J7 b[color=rgba(0, 0, 0, 0.749019607843137)]12
    ' }, j8 B# h  o" n# R[color=rgba(0, 0, 0, 0.749019607843137)]13* W7 I4 E+ Y- ?. M+ w
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    1 N( v- e7 K0 L" F. _[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    5 O9 b" q  t* G8 k+ g[color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)8 C2 k$ s& N( e8 c/ f. o
    [color=rgba(0, 0, 0, 0.749019607843137)]{- f) B! ^' |9 B9 y9 N( H
    [color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为02 U, l0 v* o  Z% B0 |$ ^7 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    & C9 H4 B' o3 i7 x[color=rgba(0, 0, 0, 0.749019607843137)]        {
    9 e9 r3 I8 t+ [  ^" _  `[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    . b* m* O" f! X/ A2 |4 U; C  e' h7 j[color=rgba(0, 0, 0, 0.749019607843137)]        }- d2 T5 z, v  _1 d% S( J
    [color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树
    + ^$ o) C' G  n( v9 M8 O[color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度
    7 }) e) d: V; f[color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    3 m* w/ x$ S* s! R[color=rgba(0, 0, 0, 0.749019607843137)]& d* X* b* d8 k8 X8 B( L+ z+ A

    5 ]3 y  m: l5 b5 V& T# W2 j[color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;
    9 y* }# I" m( r3 L( ?  i[color=rgba(0, 0, 0, 0.749019607843137)]}
    : _6 z0 S# r0 e[color=rgba(0, 0, 0, 0.749019607843137)]1
    0 I3 j2 D. v5 u6 e$ b[color=rgba(0, 0, 0, 0.749019607843137)]2
    7 o* J4 X# h; {7 m: b5 ?[color=rgba(0, 0, 0, 0.749019607843137)]3
    0 B5 _/ C& m' _% z( e[color=rgba(0, 0, 0, 0.749019607843137)]4
    . F  {" P  B3 V7 ^, X+ [2 ?& }[color=rgba(0, 0, 0, 0.749019607843137)]56 k4 T' W+ s& h* A9 Y. U' m
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    % G& m2 E1 r" P  b; j[color=rgba(0, 0, 0, 0.749019607843137)]7
    # {+ J4 m, U* O& M& b[color=rgba(0, 0, 0, 0.749019607843137)]81 }$ j, F) ~4 ]! t
    [color=rgba(0, 0, 0, 0.749019607843137)]9# h7 \, }% x/ q9 `  M' M9 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]10, x% M9 A/ r: q/ ~8 b5 m+ [) z7 o
    [color=rgba(0, 0, 0, 0.749019607843137)]11! |; |, f  I9 o
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    6 M2 c, F- R  u3 |/ l$ H[color=rgba(0, 0, 0, 0.749019607843137)]13
    3 ?' N0 U7 L; ~( R1 z* @  K' m) X2 R[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数1 l, Q) q4 f# W9 \- @: J
    [color=rgba(0, 0, 0, 0.749019607843137)]1 }3 J7 b% [+ ]: O! S  H0 Z

    ' H* }9 J4 z" t- H0 T+ r3 {1 {[color=rgba(0, 0, 0, 0.749019607843137)]
    6 T; a1 J% A2 j4 J& {) O
    0 m3 Z) ^2 ?$ }6 H- W- v" T3 P+ p
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。2 p" D% J7 C1 ~( R% T. g
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ; h& p  E+ v4 ^
    : n! A- e9 g7 {, Q# n
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数7 k/ ^' V2 p* Z( Y
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)2 `# Q/ B3 ?$ ]4 M6 O
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    7 V7 X$ `6 V7 T( t[color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);+ X: C7 X% [- ~6 X7 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)- v( ]5 i9 ^/ L0 m
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    & o  E7 I$ T' N7 v[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;7 O. }) e) i7 o' [1 k4 }$ E) ^8 f+ d
    [color=rgba(0, 0, 0, 0.749019607843137)]        }) @& P7 f  X3 }6 F- h
    [color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)
    + y% M7 F. z7 Q3 F( k( d[color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)
    9 {8 h, S# Q% f( L& ]; i% _: t[color=rgba(0, 0, 0, 0.749019607843137)]        {3 k( T0 {/ C+ K5 ?- n. \$ j
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;: Q* z2 z5 ]9 z+ |
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
      @+ q0 Y; Q) Z' Z  J[color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层5 v) n! F/ a+ S2 s6 W4 I$ c
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);
    : k4 A* X1 i: a. `( e$ e. G[color=rgba(0, 0, 0, 0.749019607843137)]}
    % ?: r6 s9 f0 f& a0 |2 F[color=rgba(0, 0, 0, 0.749019607843137)]1/ C. j5 q$ @3 q& ?
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    * n% L8 ^0 V* M; t+ Q- f  w' ~[color=rgba(0, 0, 0, 0.749019607843137)]3! D. I4 {. \9 S- N& d& [* t1 _. l
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    - B$ |9 O3 `3 o; Q2 a% Q: @% W[color=rgba(0, 0, 0, 0.749019607843137)]5
    8 I2 x, V  Y; w) t% X& H+ T1 J( v[color=rgba(0, 0, 0, 0.749019607843137)]6
    - k  U. V) G5 ^3 c  A2 C! b$ B[color=rgba(0, 0, 0, 0.749019607843137)]7. V5 @- r  o9 E
    [color=rgba(0, 0, 0, 0.749019607843137)]8
      z$ m5 c! O, p) T[color=rgba(0, 0, 0, 0.749019607843137)]9
    # K( o$ g+ Z$ k( Q% b: y[color=rgba(0, 0, 0, 0.749019607843137)]10& U0 [6 ~9 l" x9 n" X5 ^- M: y
    [color=rgba(0, 0, 0, 0.749019607843137)]11
      m+ w6 M5 q6 c# q$ J[color=rgba(0, 0, 0, 0.749019607843137)]12, B& \9 f$ N- r3 r; H1 T! U
    [color=rgba(0, 0, 0, 0.749019607843137)]13/ d( E" ~4 H" L' h+ T; a/ _( {
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    ; n! {; p1 T4 _- m/ H* B[color=rgba(0, 0, 0, 0.749019607843137)]15
    3 j+ e, y; E* H! L[color=rgba(0, 0, 0, 0.749019607843137)]16$ d5 @, t$ k" s0 q
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    7 D# w$ }- J$ P[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    " E. V( K  `- g- _[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    0 _: J" w  I1 K7 I- e7 r4 N& r' C: ~[color=rgba(0, 0, 0, 0.749019607843137)]{
    % i5 r8 ]* n$ G0 s6 U. P. {! M[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    ; X, U6 K# W5 b0 b0 p[color=rgba(0, 0, 0, 0.749019607843137)]        {
    2 v3 A& z. H7 t' w[color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;
    * d% q4 z6 p, j# u3 j! \( L' O. l[color=rgba(0, 0, 0, 0.749019607843137)]        }8 k$ f+ [. c1 S0 D, F1 O
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)  d5 X8 G* C6 ^& g! Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    7 F' j3 u6 K8 B7 Z& ~  k[color=rgba(0, 0, 0, 0.749019607843137)]                return root;' E* d' X/ K9 ~. w: z' t( v
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    . F! b# ~. o0 R4 O6 m[color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树, q5 {# E! H1 f+ l# z9 Y0 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);  h/ T- z: j# h/ E- z
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)
    8 F% {$ h- V: S[color=rgba(0, 0, 0, 0.749019607843137)]                return lret;+ L' L; V$ I3 S+ w0 `
    [color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树
    ) ]" ]( c3 l4 K1 U- r, Z: v0 V& p[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);
    ; E1 @# [6 o1 \4 J: |* h[color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    8 @6 W# K- v) I9 @% f% x[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;! u2 g% K- q3 {9 [0 `+ @( I
    [color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;
    2 ^% w/ {+ Q) d2 g8 Q* t: v% g[color=rgba(0, 0, 0, 0.749019607843137)]}5 Z$ Z7 N. N; M& B' S1 I
    [color=rgba(0, 0, 0, 0.749019607843137)]————————————————: Y( M% {, I7 ~" X9 j
    [color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 q7 Y6 D* c" f4 {9 F
    [color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212
    : p+ f0 v' a' m2 y; o" j
    * m/ {  v% W! e, z- B: x, U/ M% s' R9 s/ ^
    [color=rgba(0, 0, 0, 0.75)]
    * [" M% S; U4 L% i3 P6 s7 b: r" E) m% T

    ) T% `2 Z- n5 u7 L. r4 M# L' {
    , W  K+ [" v; G; f  I: B" Q
    & R3 s7 M$ v. |1 G7 |, n5 n
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-10 15:03 , Processed in 0.345906 second(s), 51 queries .

    回顶部