QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2480|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历/ ?8 N- Z- \6 a3 l
    " J+ \7 o7 D  m
    [color=rgba(0, 0, 0, 0.749019607843137)]文章目录8 F" D: ~* h  O6 {0 [
    [color=rgba(0, 0, 0, 0.749019607843137)]前言
    % i6 R5 w$ ^5 i$ |[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式9 e( `, B; Q* |$ a& p+ W
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)( o* j- m* M4 H+ d* d0 z) u7 S
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历4 D6 L$ z2 }% j2 i2 @
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
      ~: I2 p" }5 g" J3 X' G% q) ~[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数# F9 g6 c- M6 j: E! S2 R
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度+ X# E! t* m4 ?0 a, @! R. G9 U
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    - f6 U# l& Q( y3 F* k+ \) @[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    4 k$ Y  |! P# N" A/ L' S. P[color=rgba(0, 0, 0, 0.749019607843137)]前言
    * H5 V7 x: n1 P5 o" f5 ][color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。" R& o; b1 e: q2 s
    [color=rgba(0, 0, 0, 0.749019607843137)]( p- |1 K( U( X! x+ \

    / {- J( f" Q. N4 T; k[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式( K' h1 {/ U4 n: a( i
    [color=rgba(0, 0, 0, 0.749019607843137)]* d8 \$ T, G* d' }' _# F8 t! Y

    % q$ G& k7 l3 N* K1 n, ^/ ^3 @[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:9 r/ i4 M7 e1 q: t$ d/ x; V
    [color=rgba(0, 0, 0, 0.749019607843137)]
    . h9 w8 U# ^, g7 H! {: H# @

    $ w9 t3 t& K) O- U1 q[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树
      [; Y7 s4 k9 M# n) N3 }[color=rgba(0, 0, 0, 0.749019607843137)]
    % i/ M! D6 T; }) ~# ~, Y8 }9 W
    ) X. I* {. ]" x
    [color=rgba(0, 0, 0, 0.749019607843137)]$ I; f+ g* k1 o8 _6 i

    4 w) `7 `7 `7 @% P. T[color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树
    3 l+ D0 P7 B4 S! ^[color=rgba(0, 0, 0, 0.749019607843137)]! }: P6 d! q; U( l1 {! W

    4 L2 H- Z3 @* G: t[color=rgba(0, 0, 0, 0.749019607843137)]
    ! R7 ?3 x+ b  V9 c% k4 i: I
    1 n  q* \) ]; ]; V9 m+ t' _
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根  a& u$ g+ c1 c
    [color=rgba(0, 0, 0, 0.749019607843137)]
    5 L$ S( `# I. N* {# Y) j- n
    ) F! r& h% a+ A# {9 t
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ) h- r% B' h' }! x, e- B
    0 O: a+ g$ m. Q5 d/ I6 O1 r! c
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)7 C: s( ?; `! |3 q7 J& A
    [color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之
    , |$ a5 d6 D- m[color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;) R0 k6 Y2 J  |. b
    [color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;3 X' [! g6 ]' B* [" T% J2 i
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);! T1 F6 ?5 T/ [* J5 C
    [color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);- v: z2 ?# r& h) v2 I8 t; o1 z2 ?1 m
    [color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);9 L  M" I$ c$ {
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);
    % o: t& R- Q! t4 f  s5 o' b# t. n[color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。
    % w! i$ O1 `) b4 U: Y# M[color=rgba(0, 0, 0, 0.749019607843137)]
    1 n' ?+ U4 p+ p5 e& a

    ! p+ C5 [/ D; k# {9 e[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    ) [1 n* i  K- k# q[color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1: ~# ~/ {% h9 Q, R4 g
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h># D' `8 Z7 i5 J1 Y! t% O( d8 |3 c$ L
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>! S  n. a  C8 N+ T  h$ A
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>" u  V% v; b& ^
    [color=rgba(0, 0, 0, 0.749019607843137)]
    1 l" s4 ~$ j: g  P2 l. h$ S3 u

    - ]7 S5 M" R. k: P) B[color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;/ Y9 v2 r! t* Y2 F
    [color=rgba(0, 0, 0, 0.749019607843137)]
    2 f  F3 K" V$ g0 O3 U. _

    0 n1 I; I% `: P- F7 K/ j" E- i( k[color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体
    9 R) i0 K- l7 P6 A& P) m) _$ `. e[color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    " x. G  m; a5 l' t[color=rgba(0, 0, 0, 0.749019607843137)]{8 G! t% Y- l0 N( j
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;3 F- K. D+ s/ O  {1 o( W
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;( p7 ?! ]  g7 c- }
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;" F8 [8 p. M1 Y, y  c
    [color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;% H1 N7 U8 o. y; @. K- h
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 U( u: Q6 X' V' S- T5 x
    ; [8 }( T9 v7 G. M) C
    [color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历
    7 a6 ~0 R3 H7 H6 c7 v+ S[color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    + C9 D; }/ f3 a' ?* c3 D; y2 k! \[color=rgba(0, 0, 0, 0.749019607843137)]{
    8 w9 K2 O' F" `( V9 K[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    # F* e4 R+ F/ ?/ C3 l, y" Y% S[color=rgba(0, 0, 0, 0.749019607843137)]        {8 A2 l! A' r& A! u* d3 I
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");1 J% j$ ?8 X0 z4 x4 M+ i6 k
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    1 K% \5 g$ S" T- j; u+ C, r' O4 v- a" m" T  h[color=rgba(0, 0, 0, 0.749019607843137)]        }# f" j( ^9 p; D
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    9 j7 h. J; {# Y  @1 W  ?. @2 Q[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);( v3 M$ y1 T8 S- j( S8 d+ @- J
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);
    1 @% f5 J4 K6 F) f# T2 ?[color=rgba(0, 0, 0, 0.749019607843137)]}# H" P  @' F, Q7 D5 }
    [color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历
    # s0 Z% n2 W8 A# f' D, C[color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)
    . z% B8 K4 e9 i' G[color=rgba(0, 0, 0, 0.749019607843137)]{
    , I; V7 i& ^. `$ ^. `[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    0 A1 M. u( o2 Q( Z* |! j1 X[color=rgba(0, 0, 0, 0.749019607843137)]        {9 W& T- w% g( V
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");5 }) U2 W2 W" |4 _& y
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;3 s* \) [( D- M2 f0 b2 @
    [color=rgba(0, 0, 0, 0.749019607843137)]        }+ |/ T. M- `7 O) v6 L+ w
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);
    % }! A4 Y5 w* T" ^/ c0 i- {5 n[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);) i8 G+ h! F0 {% |  U% B9 b7 e5 o
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);
    - \) V! W1 k/ F7 w# n; ^[color=rgba(0, 0, 0, 0.749019607843137)]}
    " G/ ?  j7 b! O3 w2 A4 n[color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历1 q( c  S: g+ n- T
    [color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)
    7 S3 C* k9 d4 `  ^[color=rgba(0, 0, 0, 0.749019607843137)]{( O2 {' h2 b1 p8 u; P) T/ [2 g' W: w
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    : ~. `# y6 Q6 b& Z[color=rgba(0, 0, 0, 0.749019607843137)]        {
    & R& v- o, j! m; J5 k8 A9 y[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");/ l. i) |. w9 {2 @: @
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;9 M$ ~% C4 ~7 F8 R1 f# c! R" Z" \! _
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    5 f; D! _2 v( v1 a1 w$ x- N6 b[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);" f$ E( C' f3 U6 Q3 ]7 W) }
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    # G) f* o/ ^1 b8 e0 \8 |6 Y[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);7 G& h9 I9 X( y# L4 L7 c/ _$ K
    [color=rgba(0, 0, 0, 0.749019607843137)]}9 O$ q; u3 X# A( a+ d( J. M
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构4 Y- w; `" q5 C; K* [
    [color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()
    # I* y+ J) C  Z+ @2 g: X[color=rgba(0, 0, 0, 0.749019607843137)]{$ O! T6 L. g' v: p' |5 w( ?! i
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间
    ; @# g; ^! u- T5 n/ u[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));
    + U% Q$ [0 a& b5 E/ A4 h8 x& w[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);$ W; C( {4 Q- y. p  m( q3 r  j3 U) I4 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));- t3 h2 f/ V, k+ A1 }: m( F& w# s# I- Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);
    ; l' h% G5 x8 v- A( ]8 C2 Y[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));. F+ X  g6 G4 h% b( K# s$ S
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);# y) }' B) N, |, r; Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));
    * T0 {4 n, f. J7 K[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);
    3 m2 D% j: t/ R8 K7 O$ U[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));) F% i( R1 j+ P! g
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);8 p' h! j( Q* V, J3 H; _9 {( M; o5 w
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));. d0 x' F5 I8 a3 l# j3 g! M
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);
    : h7 c! R) f7 N1 P( O7 W[color=rgba(0, 0, 0, 0.749019607843137)]% n$ t0 u/ `3 L! P( u; F1 P

    0 R- h" ?1 X2 G- c/ ]0 m. y2 T( y0 U5 Z7 d[color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;
    - o+ n* o6 x, `+ |3 |' S% M[color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;4 S3 }3 `2 L5 V5 I5 r7 J' t% ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;$ o% ]/ e; p% L0 @4 K8 F0 y
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;. ^* T& i- q8 M% b
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;4 o8 T9 f" s* V" D- A
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;/ B; j5 [+ W6 W( C
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & q  A' b6 h7 ^' ~  D
    5 f7 x# Q& o2 k" O
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;8 e$ ?: n& T2 L( t
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;
    3 C+ Z8 U) `0 d$ h# x* M' f[color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;2 t+ T6 w" A& C. a8 v! r1 k
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;
    ( v4 e& _7 t; W2 f0 v[color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    + b& B) T! j" ?[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;9 [: L2 c) ?4 _$ m
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;
    - h9 l9 i. J/ r# T- z[color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;
    2 Q2 a7 S, ]# ]7 |2 n! l  c# A[color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;
    0 l6 _' u; U. i1 T% \, f: I[color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;) G. L) h* m5 ^3 ?2 u4 x3 ]* z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;8 Y, ]+ G$ [: T2 b
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;
    % }# o  W- y' y  @. g8 g[color=rgba(0, 0, 0, 0.749019607843137)], X, B3 T: d/ |3 {" y. o, ^5 c8 I
    " N' c( L3 q. a8 k
    [color=rgba(0, 0, 0, 0.749019607843137)]        return n1;/ n! f9 y: F0 g# l( @
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    $ [1 \: m  ?, |' L, @[color=rgba(0, 0, 0, 0.749019607843137)]
    " [, X( G0 ]* z: [0 z
    . C) e8 G0 t' @& O# @$ z
    [color=rgba(0, 0, 0, 0.749019607843137)]int main()
    6 r1 ^3 v4 n8 |. y[color=rgba(0, 0, 0, 0.749019607843137)]{
    3 O+ m: B' G" {- |% _. x! E% m[color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
    ' ~4 r; b+ _0 ?[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();
    $ a  e$ I9 b$ C[color=rgba(0, 0, 0, 0.749019607843137)]5 d$ q3 q6 K8 {/ r

    ! D  @" Z0 d6 b3 R[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    1 O; b' R1 B7 [  V[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");  a! }  Q5 j6 q- Z0 ?2 Y  |! u  N
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    % ]( b! o3 o$ {- B: `8 `1 p[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    ! w; q, h# c- h/ q6 w! M2 a[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历/ K! _! J( W$ ~7 H% p& T1 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");
    9 g1 g; Y" `, V2 @0 h7 }[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    2 O/ B1 p# p# @! X- E8 f[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");. y' m! B% T5 q) H$ I
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历# F$ g2 L( I5 W
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");. u6 w& E' B* X6 F
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    ) ]8 i+ Y1 J  e[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    " x7 Z- \1 D9 |[color=rgba(0, 0, 0, 0.749019607843137)]
    ; F$ c3 H+ {: z/ ~

    - V: [! F/ K1 O' g' R* U[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;3 e4 R% P3 A- S5 N
    [color=rgba(0, 0, 0, 0.749019607843137)]}9 l) f/ Y2 @( {' @% |6 f. `9 l
    [color=rgba(0, 0, 0, 0.749019607843137)]12 {3 n$ z: Z3 H1 Z# T6 I( t# x, w
    [color=rgba(0, 0, 0, 0.749019607843137)]2- v2 [' W% c9 Z" O
    [color=rgba(0, 0, 0, 0.749019607843137)]3  v( M& K! d! [2 d8 X# F
    [color=rgba(0, 0, 0, 0.749019607843137)]4% F' C5 a- D: }
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    " m. S% R+ m/ A[color=rgba(0, 0, 0, 0.749019607843137)]61 ?7 P: n" v# {& d, `
    [color=rgba(0, 0, 0, 0.749019607843137)]7" }5 v5 R% J  f! v) t. M) |$ U8 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ' {" z; ]- I. R& B  A4 j[color=rgba(0, 0, 0, 0.749019607843137)]98 c3 n2 M/ d. O2 I9 m
    [color=rgba(0, 0, 0, 0.749019607843137)]10. |$ R* C4 J- c; C6 c
    [color=rgba(0, 0, 0, 0.749019607843137)]115 ^! x" R! Z. _' B
    [color=rgba(0, 0, 0, 0.749019607843137)]12+ P3 i9 h" w: L3 q$ V  m
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    6 i7 }% S5 u) }# b' ~1 i% s[color=rgba(0, 0, 0, 0.749019607843137)]14
    8 F+ d* ~) o& S+ ?6 x% C[color=rgba(0, 0, 0, 0.749019607843137)]151 S- h$ V4 ^* \; D, B$ d% X
    [color=rgba(0, 0, 0, 0.749019607843137)]16( Y  K% |5 `/ b+ z/ k# _0 t. R
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    : t& }# G; n. |[color=rgba(0, 0, 0, 0.749019607843137)]18
    . @3 U  C( |, t- N0 r, c; E[color=rgba(0, 0, 0, 0.749019607843137)]19
    + f8 @. I0 E( `2 R4 w3 ~/ }) I$ [[color=rgba(0, 0, 0, 0.749019607843137)]20% S* |# w7 M5 I$ Y; X# F
    [color=rgba(0, 0, 0, 0.749019607843137)]21) V) f! u0 r% e
    [color=rgba(0, 0, 0, 0.749019607843137)]22" t* |1 g* D) C& I' ?6 p1 h
    [color=rgba(0, 0, 0, 0.749019607843137)]23* ?6 E; z9 P& q) R
    [color=rgba(0, 0, 0, 0.749019607843137)]24- H2 z/ i) k" o. e
    [color=rgba(0, 0, 0, 0.749019607843137)]256 m$ B7 N, X" O5 D( Z3 K' U; H+ ~
    [color=rgba(0, 0, 0, 0.749019607843137)]26. R  _: g  n. s" Y4 o
    [color=rgba(0, 0, 0, 0.749019607843137)]27
    + o3 Y3 l: ?" ~7 A[color=rgba(0, 0, 0, 0.749019607843137)]288 C' S5 A! n- ~0 j! m6 L
    [color=rgba(0, 0, 0, 0.749019607843137)]29
    / ]3 u& {( S6 l. j" H[color=rgba(0, 0, 0, 0.749019607843137)]30- O5 p( g# N+ M1 y
    [color=rgba(0, 0, 0, 0.749019607843137)]31$ C$ E$ `- C/ X' C7 S# c3 o& C; R
    [color=rgba(0, 0, 0, 0.749019607843137)]321 u3 F/ j) f- j9 @' S* M& F" _
    [color=rgba(0, 0, 0, 0.749019607843137)]33
    2 j- Q/ o) j/ c" a. Y[color=rgba(0, 0, 0, 0.749019607843137)]34
    6 \" r6 v6 S9 C8 D0 r4 A" _[color=rgba(0, 0, 0, 0.749019607843137)]350 j8 j$ V: t3 X) D# O
    [color=rgba(0, 0, 0, 0.749019607843137)]36
    , t3 L* ^) \$ k; Y, a2 C[color=rgba(0, 0, 0, 0.749019607843137)]37
    6 g: J# X$ b, a7 Q; v4 L* U[color=rgba(0, 0, 0, 0.749019607843137)]38  C' C# f2 p3 }7 \4 H7 Z$ ?
    [color=rgba(0, 0, 0, 0.749019607843137)]39
    & d) A  B' A7 J' ][color=rgba(0, 0, 0, 0.749019607843137)]402 {' \' n5 S0 x4 g9 M( x  `7 w) J$ A8 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]410 [4 M$ ^  k3 O) v$ y' J- u" R
    [color=rgba(0, 0, 0, 0.749019607843137)]42
    ! P7 ~& I  P, o4 V[color=rgba(0, 0, 0, 0.749019607843137)]439 e- Q9 s, a3 |) d
    [color=rgba(0, 0, 0, 0.749019607843137)]44
    ; _6 ]# O$ K, m$ N- [# |* K' ^" Q[color=rgba(0, 0, 0, 0.749019607843137)]45  \+ r: ^% t' i; Q2 k* H
    [color=rgba(0, 0, 0, 0.749019607843137)]46+ h7 B/ D& A, W% ?3 L
    [color=rgba(0, 0, 0, 0.749019607843137)]47
    ( |7 [  e( M$ K8 j[color=rgba(0, 0, 0, 0.749019607843137)]48% i7 S4 h& H2 o& k$ n# m6 t. X3 P
    [color=rgba(0, 0, 0, 0.749019607843137)]49
    ! s" R" v6 y2 p2 n4 c% D[color=rgba(0, 0, 0, 0.749019607843137)]50
    - E: x! @3 r& t5 N0 [[color=rgba(0, 0, 0, 0.749019607843137)]51
    + [" b" C( D+ s& p[color=rgba(0, 0, 0, 0.749019607843137)]52& d8 y4 ?$ I9 j1 t4 q
    [color=rgba(0, 0, 0, 0.749019607843137)]53
    " X& D: G/ q! A, F[color=rgba(0, 0, 0, 0.749019607843137)]54* C% I. f, u. E! ?" \! I* y+ R: [. d5 E
    [color=rgba(0, 0, 0, 0.749019607843137)]553 H  ^5 M7 U! g9 V! w8 V
    [color=rgba(0, 0, 0, 0.749019607843137)]56
    8 o1 Z' [/ r9 i9 P# ?8 B[color=rgba(0, 0, 0, 0.749019607843137)]57
    " [) X  A4 a" W& T; _% `[color=rgba(0, 0, 0, 0.749019607843137)]58
    # }1 ^3 k4 c* ]& G1 ~7 G[color=rgba(0, 0, 0, 0.749019607843137)]597 ]4 Q! M7 R% C8 K4 H+ ]/ k6 K7 H5 i
    [color=rgba(0, 0, 0, 0.749019607843137)]608 n; p' d+ K4 ^  Z8 G8 \
    [color=rgba(0, 0, 0, 0.749019607843137)]61
    / C# E" j. c$ \! W[color=rgba(0, 0, 0, 0.749019607843137)]62% ]$ n6 [- v0 a6 G
    [color=rgba(0, 0, 0, 0.749019607843137)]63
    8 k+ f3 L6 A2 f8 L- D( i2 x7 C* z$ Z[color=rgba(0, 0, 0, 0.749019607843137)]64
    + |/ ~0 h; A  G[color=rgba(0, 0, 0, 0.749019607843137)]65, s$ m0 X/ \& ?+ Y9 t( }
    [color=rgba(0, 0, 0, 0.749019607843137)]66
    $ a0 v; d4 ?* M& m[color=rgba(0, 0, 0, 0.749019607843137)]67+ o: X+ o0 u* R3 n4 `
    [color=rgba(0, 0, 0, 0.749019607843137)]68
    6 V# U1 A) y( x/ x+ ]4 |( v7 ?[color=rgba(0, 0, 0, 0.749019607843137)]696 Y' j/ y8 y9 R4 d  H) P6 A
    [color=rgba(0, 0, 0, 0.749019607843137)]70
    " l' k& b& |3 i7 z% m[color=rgba(0, 0, 0, 0.749019607843137)]71) k0 d: M5 l9 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]72
    6 u2 [) \& `: e( a[color=rgba(0, 0, 0, 0.749019607843137)]73" [0 W! A0 z( r% B9 U& U
    [color=rgba(0, 0, 0, 0.749019607843137)]744 v, d+ u, G  Z* M* c' T: x8 [* W
    [color=rgba(0, 0, 0, 0.749019607843137)]75
    & l1 T% \2 }6 M0 l[color=rgba(0, 0, 0, 0.749019607843137)]76
    $ L$ S7 A! i7 Q$ c3 \[color=rgba(0, 0, 0, 0.749019607843137)]77; i2 q0 a  x9 z
    [color=rgba(0, 0, 0, 0.749019607843137)]78
    1 E2 ?$ t8 ?$ s$ X/ H[color=rgba(0, 0, 0, 0.749019607843137)]796 Q  i4 D9 Z$ q' \% z0 i
    [color=rgba(0, 0, 0, 0.749019607843137)]80, r# n3 n" H- H( ]
    [color=rgba(0, 0, 0, 0.749019607843137)]81
    . o7 v! m* j) q; z" B3 j[color=rgba(0, 0, 0, 0.749019607843137)]82. r: q! l% H  h5 M
    [color=rgba(0, 0, 0, 0.749019607843137)]83- b. U3 m% T8 M. |
    [color=rgba(0, 0, 0, 0.749019607843137)]84$ g& X; s0 d2 ?5 x) p1 x
    [color=rgba(0, 0, 0, 0.749019607843137)]85& E+ Z% B! {" C
    [color=rgba(0, 0, 0, 0.749019607843137)]86
    8 O: t0 U3 Q  f: H$ H8 [; `/ y[color=rgba(0, 0, 0, 0.749019607843137)]87
    # }5 R. Y, ]4 G+ y9 J/ T% C+ ^  y[color=rgba(0, 0, 0, 0.749019607843137)]88
    + T# {+ w) d( W1 `9 x* J[color=rgba(0, 0, 0, 0.749019607843137)]89
    9 r  Q) X- e, h5 d, k[color=rgba(0, 0, 0, 0.749019607843137)]90
    ; F) g" E. y6 C+ X% W+ U, k[color=rgba(0, 0, 0, 0.749019607843137)]911 z. |- {! ]/ M$ B0 t$ e) h
    [color=rgba(0, 0, 0, 0.749019607843137)]92
    1 ?* z) h0 k2 {8 [, f[color=rgba(0, 0, 0, 0.749019607843137)]93
    ; o: F" I! G8 f0 J; v( }% }0 X2 \[color=rgba(0, 0, 0, 0.749019607843137)]94
    * T; e2 w1 Z1 x8 F1 n[color=rgba(0, 0, 0, 0.749019607843137)]95
    ; S+ b7 s; J, y: T[color=rgba(0, 0, 0, 0.749019607843137)]96
    # l) h2 B2 ?& m+ B  N  c4 m3 g[color=rgba(0, 0, 0, 0.749019607843137)]97
    8 j& V: y* C4 z& Y8 T4 q' q[color=rgba(0, 0, 0, 0.749019607843137)]98' `$ j, w* G$ ~- k! h! L
    [color=rgba(0, 0, 0, 0.749019607843137)]99# l7 a6 r& J9 v7 U2 E
    [color=rgba(0, 0, 0, 0.749019607843137)]100
    $ g) t& z; p' U- Y; Q; `1 ~* d; p[color=rgba(0, 0, 0, 0.749019607843137)]101
    * z( }; j9 o: W8 T9 p[color=rgba(0, 0, 0, 0.749019607843137)]102
    # E$ ~& j- T. D/ G[color=rgba(0, 0, 0, 0.749019607843137)]103: U) T" P  ]0 h: p6 i0 ^+ t/ H! \
    [color=rgba(0, 0, 0, 0.749019607843137)]104* X6 L7 B5 l. C: I( Q
    [color=rgba(0, 0, 0, 0.749019607843137)]105
    + J$ h; _7 V) u[color=rgba(0, 0, 0, 0.749019607843137)]1069 Q; r5 h# ~. s6 b
    [color=rgba(0, 0, 0, 0.749019607843137)]107* D6 |% H: i$ j/ {6 P
    [color=rgba(0, 0, 0, 0.749019607843137)]108; a( b5 a8 D) k
    [color=rgba(0, 0, 0, 0.749019607843137)]109
    ( H1 a( Y1 O% Q- y* m4 Q' A[color=rgba(0, 0, 0, 0.749019607843137)]110
    * |+ E* L' T  P2 t! @[color=rgba(0, 0, 0, 0.749019607843137)]111
    7 L, x2 i; H1 j( s) t[color=rgba(0, 0, 0, 0.749019607843137)]测试结果:
    ' m, t0 A. z* Q" e6 w3 N1 |[color=rgba(0, 0, 0, 0.749019607843137)]
    # d. f& S+ J3 C' f
    3 Y' c! ]* k5 q/ {8 K' M0 ?0 z
    [color=rgba(0, 0, 0, 0.749019607843137)]
    / H4 K1 v; X' V$ L: N3 a
    / L6 l- s' {, j' p$ q* n/ O
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    & c7 a: V( {! m% j8 S[color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)
    , |" x2 y, W$ C6 k- ~) u[color=rgba(0, 0, 0, 0.749019607843137)]
    * H- K8 h. F( [+ B& _0 X& ]% \
    0 V* l; u/ v# C! I  J/ ~* \, L
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小1 e. G6 ?  g. C, k, n
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量: N6 _# e% o2 T9 U9 Q  h: Y
    [color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;
    % q: {" L9 O$ V* \[color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)- c7 P+ [) s7 u. k0 a1 `$ S- V3 y
    [color=rgba(0, 0, 0, 0.749019607843137)]//{2 R  Q0 R7 K, y' a! S# s4 H
    [color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)
    5 q0 }# r( t* n7 y& ~+ Q* m[color=rgba(0, 0, 0, 0.749019607843137)]//        {
    & g3 F0 H( Q) G" Y0 q+ a[color=rgba(0, 0, 0, 0.749019607843137)]//                return;
    8 _7 }+ E- s5 r5 Y$ W[color=rgba(0, 0, 0, 0.749019607843137)]//        }  L* @- \& ]" h4 p: X
    [color=rgba(0, 0, 0, 0.749019607843137)]//        count++;
    $ L9 I2 E. m* E! ~' ?+ ~[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);! M) C4 @1 K* H. T# O. v" t( O
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);! Q& ?5 |* I/ R: L
    [color=rgba(0, 0, 0, 0.749019607843137)]//# M  z% a3 H2 s: p$ h$ A& [7 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量$ E9 u) z. o% i& Q6 h9 T
    [color=rgba(0, 0, 0, 0.749019607843137)]//}: V( V& @- S0 E8 b4 ?4 @9 f5 N" M% q
    [color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之
    # h7 k% B2 t& O5 C[color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root). O5 l3 m6 h9 X
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    3 _+ i( \+ }- R. r% E' Q9 v7 f% X[color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;, L. A5 f" E9 j4 i) O6 {0 V
    [color=rgba(0, 0, 0, 0.749019607843137)]}  r$ r: L6 _2 |5 ~. e/ [! H
    [color=rgba(0, 0, 0, 0.749019607843137)]1* F# M5 o, V+ ]. L7 a+ x
    [color=rgba(0, 0, 0, 0.749019607843137)]29 H6 z6 H6 V; `" @" D
    [color=rgba(0, 0, 0, 0.749019607843137)]3" S$ k) P! D3 Z- R9 |1 z* d
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    / c# k: q. z% F9 A$ c  H[color=rgba(0, 0, 0, 0.749019607843137)]5/ E7 P: X/ P6 V0 b
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    / f/ `2 {4 M( n7 \[color=rgba(0, 0, 0, 0.749019607843137)]7) q& ]  S. P: X" S4 I/ C1 m# F
    [color=rgba(0, 0, 0, 0.749019607843137)]87 w5 f/ D7 T) H; X
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    ; M  T9 G* [. w[color=rgba(0, 0, 0, 0.749019607843137)]10; O1 X2 a3 m" h2 w1 q3 T3 {9 \
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    $ {$ M7 A" n6 U5 q3 v3 N2 \3 J& k[color=rgba(0, 0, 0, 0.749019607843137)]122 l1 n) c" X* u5 w) @
    [color=rgba(0, 0, 0, 0.749019607843137)]13+ L( [; R0 g- |4 ?: u3 T1 L5 @
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    ' O3 `8 e8 a3 A: Y[color=rgba(0, 0, 0, 0.749019607843137)]15/ T- I2 k3 i* s% A7 w8 z5 y; b2 s
    [color=rgba(0, 0, 0, 0.749019607843137)]16" V1 Z* ^* p& e5 ?/ q
    [color=rgba(0, 0, 0, 0.749019607843137)]17, g: T7 o* J/ w" v
    [color=rgba(0, 0, 0, 0.749019607843137)]18
    7 g" a, z8 z2 a# v$ Z[color=rgba(0, 0, 0, 0.749019607843137)]19
    8 ^# K$ s. D0 g[color=rgba(0, 0, 0, 0.749019607843137)]20% P1 J' e) _6 q8 x/ D- i6 m4 N& l
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    $ c+ \5 E# {; \[color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数
    6 n/ z! s, r; b[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)
    1 ]! Y" G( J6 m/ Z9 G6 q# ^5 u$ c[color=rgba(0, 0, 0, 0.749019607843137)]{
    3 c+ A! g. k1 N% t: T/ t[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点$ `; _& \1 s! C6 t* _5 q
    [color=rgba(0, 0, 0, 0.749019607843137)]        {+ \. G$ V# \5 q5 O
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;0 C- B/ l" J3 C
    [color=rgba(0, 0, 0, 0.749019607843137)]        }( p) {3 k* m, Y1 a' a: e
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空
    5 D0 ~7 R% i' A6 l& i. R[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)" |& n1 o' }- Q# z, u% |
    [color=rgba(0, 0, 0, 0.749019607843137)]        {) x8 N4 L. l, Y1 F8 w6 O" r3 s  [
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    4 r2 q+ \  a' K- g[color=rgba(0, 0, 0, 0.749019607843137)]        }9 u2 j; j) Y8 _( g9 K
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);
    + o: l' V) g4 u  D- y) F[color=rgba(0, 0, 0, 0.749019607843137)]}6 x! E+ Q. S9 V# d8 }
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    ! X1 f3 R3 X( a7 Q. N[color=rgba(0, 0, 0, 0.749019607843137)]2( n3 Q) x8 R$ }% G$ r9 T
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    0 |9 r2 `  X/ s. J[color=rgba(0, 0, 0, 0.749019607843137)]4
    1 u% T' X- d4 ?6 O% n[color=rgba(0, 0, 0, 0.749019607843137)]5
    4 p$ Z7 C' K: q: V[color=rgba(0, 0, 0, 0.749019607843137)]6: Q$ I& h7 R3 b5 y
    [color=rgba(0, 0, 0, 0.749019607843137)]7! `0 G4 L! a6 N% {
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ) }! D' u9 U0 ^/ j- @[color=rgba(0, 0, 0, 0.749019607843137)]90 N( _4 w; d# W# d0 ?1 o$ c
    [color=rgba(0, 0, 0, 0.749019607843137)]10  j/ J! X, N' g+ t- @6 [
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    ; I% {2 P9 }: @8 T: \[color=rgba(0, 0, 0, 0.749019607843137)]12
    ' v6 W# M5 ?. B, v+ G, m[color=rgba(0, 0, 0, 0.749019607843137)]13
    ( N$ o6 U& w/ I4 m[color=rgba(0, 0, 0, 0.749019607843137)]14+ s8 G# Q# c8 m5 V# T8 F
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度2 M8 e( _( L( F  I9 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)0 P& ~# R) p9 ^8 M
    [color=rgba(0, 0, 0, 0.749019607843137)]{) ~  C4 B3 X1 ?4 l6 [
    [color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0
    ; ^* U- {7 S% R[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)% T& i& M5 J' e) C
    [color=rgba(0, 0, 0, 0.749019607843137)]        {2 K# w/ |8 l; P, u6 S
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    : O5 h8 _% [7 N' V[color=rgba(0, 0, 0, 0.749019607843137)]        }
    8 i& f. E4 `: k# ~[color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树" ~) ]5 e2 b0 z; t, O; O
    [color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度
    * a& d1 C+ h& _7 ]2 ][color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    4 h% H* S1 {, K8 D& h[color=rgba(0, 0, 0, 0.749019607843137)]& N9 z+ D# c; v: K

    0 {8 F# {+ ]! Z, K[color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;% r- Z2 Z! t( ]' t7 E7 H1 [+ s, C
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    % ~/ w- ^  s( ^" C/ V7 R6 P[color=rgba(0, 0, 0, 0.749019607843137)]12 k0 v6 s; P# S$ X
    [color=rgba(0, 0, 0, 0.749019607843137)]2/ ^! F3 K/ y0 w7 d: U# b
    [color=rgba(0, 0, 0, 0.749019607843137)]39 o9 j* T# [5 d. H' J' N
    [color=rgba(0, 0, 0, 0.749019607843137)]48 c6 l. i  l) k8 N& `6 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]5, T6 j% _9 q+ _$ W& W2 p+ j. K
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    : X, u) y) p9 ?- k, |5 p/ W[color=rgba(0, 0, 0, 0.749019607843137)]7
    0 S% l9 M6 B4 ?' W1 P6 q# ^- D[color=rgba(0, 0, 0, 0.749019607843137)]8
    , [' H# K6 Y. }" E& V+ [6 Z4 x[color=rgba(0, 0, 0, 0.749019607843137)]9, i; m! q+ T( X: }- e5 {
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    $ ]# w6 \2 w8 `! j[color=rgba(0, 0, 0, 0.749019607843137)]11
    ) l0 b3 u" y7 g: ?1 U  V[color=rgba(0, 0, 0, 0.749019607843137)]120 t/ X( X6 ?' {  I
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    ' e- R- o2 a/ F) F# C2 G& W[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数1 ~* A6 ^: i) D
    [color=rgba(0, 0, 0, 0.749019607843137)]. H& N3 L' Q# W) B9 g6 ]0 o1 {; I
    , m: n0 W) r' @0 r: M9 a7 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]
    6 x2 ~+ `- J% n* |& u
    " E" I+ f8 ^% @$ h" h
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。
    $ K3 b9 @5 v5 k5 f[color=rgba(0, 0, 0, 0.749019607843137)]1 ^# m, H* y! D. G1 P

    , e; Y; Y" w( P2 |% i3 N7 e' p[color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数% s  e+ N% }1 e% g- q8 ^* Q
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)
    . P' s8 _8 k1 b, J6 [5 R( W[color=rgba(0, 0, 0, 0.749019607843137)]{
    3 U, c5 }9 ]  b/ b/ S4 F[color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);
    2 Z) i4 k* t% S# L8 _[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    7 \, w( E8 n6 x+ Z) ][color=rgba(0, 0, 0, 0.749019607843137)]        {
    7 l/ \) S" K" j7 B/ x: N0 n  x[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;& p6 |' R/ h2 |
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    - ]+ v& u2 }3 j[color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)
      ~9 {" W& ?2 z! k[color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)
    8 ?! ~( M) c) B" B2 E! H[color=rgba(0, 0, 0, 0.749019607843137)]        {- H$ }+ O; A+ t/ E9 P* u# F2 }
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;! w+ j3 d1 \7 |! q0 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        }" |2 ?5 @2 }) X" n0 z) i+ D
    [color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层6 V" n' [: e. f5 K3 a: Z: e
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);9 T- [7 I- `" I/ I, M& E
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    6 F6 }% W  ~0 T- N7 n3 C6 u[color=rgba(0, 0, 0, 0.749019607843137)]1
    : H  P& E% E* C- n" Z. N[color=rgba(0, 0, 0, 0.749019607843137)]2* z" \7 H) l5 P$ I/ E% G
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    1 x2 Q; w9 {: \2 v2 f. J: F, _# O% i[color=rgba(0, 0, 0, 0.749019607843137)]4
    ( D% b0 o9 _6 m3 q! J[color=rgba(0, 0, 0, 0.749019607843137)]5
    ! ~( K& C- G8 w* E: z% f[color=rgba(0, 0, 0, 0.749019607843137)]6% j9 v# P( ^6 d/ j( O5 F
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    1 b$ A. E/ B  O% P! W& j[color=rgba(0, 0, 0, 0.749019607843137)]8$ B' m& K/ l0 R  W, v
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    / Q$ D0 x! q0 u7 L* f& m/ c# O[color=rgba(0, 0, 0, 0.749019607843137)]10
    3 B: J3 d( M) \' b7 V[color=rgba(0, 0, 0, 0.749019607843137)]11: \  G: l7 ?) G1 M6 `6 f9 c& m# l
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    7 v2 V1 W: F. `  }8 p. ^( [4 h[color=rgba(0, 0, 0, 0.749019607843137)]13( j8 q3 C4 K1 M1 k$ s3 {
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    # K& Q; a% }" ?/ Q[color=rgba(0, 0, 0, 0.749019607843137)]15* t* t# t$ A/ ?: c
    [color=rgba(0, 0, 0, 0.749019607843137)]16
    7 \& y" i2 i* W8 R! B: U, s. D[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    0 o- A8 ~+ B* G/ m% x& m0 t[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    , V, L6 {' ^* P4 y& U  U[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    2 P7 _' A5 E0 I3 b[color=rgba(0, 0, 0, 0.749019607843137)]{) K1 [+ ^& S6 v4 L1 r) W# O" ?/ ^: B0 w
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    5 d, c) r+ U" |7 H[color=rgba(0, 0, 0, 0.749019607843137)]        {
    3 H5 M9 X0 k* ?4 N4 f% [4 x! l[color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;
    ! G8 t$ S7 ^  s) r$ T[color=rgba(0, 0, 0, 0.749019607843137)]        }
    4 G5 L: O9 W4 r+ k) ?6 i[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)
    1 E7 q1 Z) a$ t# @+ V7 \7 D[color=rgba(0, 0, 0, 0.749019607843137)]        {
    , y9 l2 V" p% U[color=rgba(0, 0, 0, 0.749019607843137)]                return root;
    - `: _. O0 n6 b; e* B  c[color=rgba(0, 0, 0, 0.749019607843137)]        }' l6 Y; z9 K& r' P3 r& Z' R
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树
    : M0 {9 |4 ?1 P1 r9 S3 {[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);8 k0 U) V6 E% f
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)6 o$ \+ n: v8 r3 H7 `
    [color=rgba(0, 0, 0, 0.749019607843137)]                return lret;
    3 k8 M0 E" T, S% Z[color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树
    & a1 H, u' K) H7 @+ ]; d' b& z[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);. h: O( b  N$ N
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    % N* ?/ o, H# l( a[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    # Z8 Y5 f1 ?* @6 G  `[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;
    % E. m- M0 J+ m1 K% M: l[color=rgba(0, 0, 0, 0.749019607843137)]}
    ' j, L% u' S$ j' X& H8 @[color=rgba(0, 0, 0, 0.749019607843137)]————————————————
    ' W- X# U% L, K[color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( l- `& j, T$ p3 x[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212
    - s- S; c+ n) d# c" G8 H$ y+ @& V. c; o

    6 X& U% D# a, L) L" @* l' H& v[color=rgba(0, 0, 0, 0.75)]( l6 W8 N3 y) E+ q2 F; U- H' K
    & ?3 j+ o- y' T

    0 ?; w3 ?8 R( O6 N' S* Y+ W4 z# r0 D! E* s
    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-6-15 14:02 , Processed in 0.471725 second(s), 52 queries .

    回顶部