QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2491|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历  x8 f) g8 g. s( F6 o0 t: {  b1 K

    % ^* i1 a4 `* T3 |' @[color=rgba(0, 0, 0, 0.749019607843137)]文章目录: U9 K5 T7 b- G& Q# v1 L: ^- Q  j
    [color=rgba(0, 0, 0, 0.749019607843137)]前言
      f. e; e' A7 C9 Q3 K6 J7 x% c[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    0 e) Q% N, Z, G0 f: ?& P[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)0 ^8 C- B: N+ }0 r1 v. @, D% C5 M9 J
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历8 l% F) b5 h  U% ]
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    - F( \' Z; C2 j9 J+ v[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    . T5 D( P) p- e' Q8 _8 F[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度" g1 W. S# q: D6 z$ n7 I( w, J
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    4 K( w6 j. m1 i8 z+ G2 c& w[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找# S. E+ `( j0 o$ Q
    [color=rgba(0, 0, 0, 0.749019607843137)]前言
    ; I7 D7 s! T' G: p+ O1 d5 w: E: s[color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。' L8 ?1 Y3 y# ?) D7 Q# B- d  B
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 V! ?9 v8 S+ C% A8 F
    0 x  \3 r* k& F+ P0 @4 g) X
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式0 k3 p- L7 g, Z: A4 O$ w9 J
    [color=rgba(0, 0, 0, 0.749019607843137)]
    1 k( P# l4 F; S% w& {! N5 h

    ; j! r. m. G$ S5 M4 R' h' C+ ?5 v[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:1 K% K' G* Y/ l6 m2 r
    [color=rgba(0, 0, 0, 0.749019607843137)]
      {6 }2 ^* U& P- m3 C9 A

    5 @" @4 t! L5 N4 q" F[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树5 p. d2 D' `( w, t
    [color=rgba(0, 0, 0, 0.749019607843137)]+ j6 W6 t8 m1 ^# o

    8 |, `  ?* Z! b# _$ b, f[color=rgba(0, 0, 0, 0.749019607843137)]) U$ |' L2 d0 G1 f, @
    + a1 ~1 y9 w' _# e$ {5 c* |1 i
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树2 e1 y! g# S& D. n: S- x
    [color=rgba(0, 0, 0, 0.749019607843137)]
    $ U& A: {$ \8 B
    $ @% f  o( Z4 M3 x/ K5 C& l3 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]& x: l- R5 O) p2 j
    3 I7 O4 R4 @. T/ E- |  w+ D
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根
    1 W$ y6 i- {# n3 H$ d" y, h6 }1 Q[color=rgba(0, 0, 0, 0.749019607843137)]5 ]* ^6 M- ?8 d. D* u
    / w) a( F: ~3 _
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & D$ z1 d( O9 a6 _0 g+ Z: R( a

    2 ?5 Q. Y; J" f8 p7 h[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    8 v7 Y0 _  v* p+ S  [4 [[color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之) @* b7 p! ]! Z1 @: T( }
    [color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;
    $ D' h5 }: T' z7 S/ P0 I[color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;; ^6 d, B4 W. e4 P5 g8 e
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);& H9 t, \) H2 A/ k2 b
    [color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);; [2 G% ^1 h, j2 F5 J2 w
    [color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);$ p: D* b$ V/ D" k' R
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);) D$ X' L1 w" }: @% ?# f- ?
    [color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。$ ~4 M, c4 h) s5 c6 {
    [color=rgba(0, 0, 0, 0.749019607843137)]8 l& i5 A1 {) @, d5 g5 j7 w2 h& }$ ~
    4 t7 o0 g* X/ o. q+ B5 m4 _& X0 u6 l
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    & ^- _( g0 h9 i8 }[color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    ! o! v' f/ l5 ?) S2 A[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>
    / ?  G- m1 T; `3 g# Y! ~[color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>
    ) O$ i" `  v# w7 B/ @[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>
    . W8 n5 n  S0 a. l[color=rgba(0, 0, 0, 0.749019607843137)]
    " K0 o1 r+ l+ e9 E6 Z0 N* _5 Y
    $ M  p& l( j" p7 |' ^
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;! s7 ~% H: X' ~: K9 }& y; k/ D5 V
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ' v% L( k( T4 I; `+ ^/ J

    3 Z6 T  M0 B1 z* I[color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体
    3 c5 d0 C6 o: _& ~[color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    6 V0 _: l3 ?2 K$ g, N[color=rgba(0, 0, 0, 0.749019607843137)]{  ]6 j* s, q! m+ M/ G' x3 y7 Z: Z' c7 y
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;
    ; r8 q$ w* q* }7 c[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;
    $ c" c  b9 A' j" |5 J; }5 X) @[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;
    ! s: m: o6 Z) b1 r# `& J$ Y; ^# }+ R[color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;8 \$ K" g1 Z4 `
    [color=rgba(0, 0, 0, 0.749019607843137)]2 i2 P' i0 u1 s( i; t4 [+ ]

    3 I% u% b8 I8 ~4 Q# ]- a[color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历( E  P7 e  S9 X, ?
    [color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    " @7 f- m/ x( B% O[color=rgba(0, 0, 0, 0.749019607843137)]{. o5 ?0 c0 ]& s) w% B
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    ' r4 \3 t! I- F; J[color=rgba(0, 0, 0, 0.749019607843137)]        {
    ) w9 Q* _1 o4 X4 D  D' Y[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");7 G: ]' s- h. N. j5 v: U0 A
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;* `' o/ @. f" C+ T' I) V0 j( G6 o
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    & V' I: G* I1 g. r  s& e, l' j[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);% m' J4 k% J, f
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);
    ! ^* g9 ~' ]* M2 }5 T! q[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);3 W. G) I- h" c! z/ I# F% P
    [color=rgba(0, 0, 0, 0.749019607843137)]}, h! Y0 g6 S6 u, K; s$ x' N- }% W6 I+ m
    [color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历
    6 ^3 R3 B7 l! t3 A/ r: ][color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)
    , f, @; K6 z# M; O  y[color=rgba(0, 0, 0, 0.749019607843137)]{" s1 L% c1 k6 O# h3 r1 J
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)% D, x) r0 M+ f% M! c' j7 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        {1 Q) q. `9 I5 B1 k% k+ b; L( R
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");2 T1 Y  N* Y% Z7 {- |. E: {. B
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;! |* q8 p! ]7 ?% @. \
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    : {+ K' U: S5 h+ C[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);- q) `: l0 T8 T
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    ) j2 k  Z' c+ k1 B) f3 y- ?% v[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);1 V0 s$ e  Z+ e0 N8 f# v+ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    & V( q# Q9 f. G2 s; e, }( p[color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历
    5 E/ W0 U7 P" X) Q9 }1 r) X) i5 |8 D0 K[color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)! C8 k* h* j3 H4 D7 K3 @
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    ) @' d1 v' _7 p% y+ h/ B4 c/ f. H[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    9 t- Y; Q" A5 b4 i[color=rgba(0, 0, 0, 0.749019607843137)]        {% ~8 m) m8 W( ?" Z' H' e( Q( [
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    ; M. u" \2 f! F: i0 ^  M[color=rgba(0, 0, 0, 0.749019607843137)]                return;5 ^" r; \0 m& {3 s3 U
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    - N( r) B' y% I[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);
    5 v4 H/ R3 y& G& \7 W* }[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
      M. I2 W! u5 M4 S) a[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    2 A$ {3 a. q' F; E& C* u0 z[color=rgba(0, 0, 0, 0.749019607843137)]}
    + g5 ^& K: t% F0 K3 ]* u- Z9 q$ Q[color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    / L7 G) @. t) w5 q  x9 X[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()
    6 k3 h: K% `& Y; y" b4 U6 F[color=rgba(0, 0, 0, 0.749019607843137)]{" Z, ]7 r8 d: ~1 B0 u2 g, j8 b
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间
    + Z6 ~; q3 ?' o3 q[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));4 {* E1 [* u/ d+ V8 _! U) J/ Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);! ^7 n' H# [* z; P( L
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));
    ! [! B! e/ G/ t  I5 m[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);
    ! K6 A8 h8 k7 ^# v[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));
    7 M! _0 P- N8 o" ~2 |[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);4 i, y( [' h; h# l2 s' t+ \% s
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));  f2 y/ ~2 I4 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);
    2 Y$ u- M% @1 a, R  n# {9 N* K0 C[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));; H4 k8 V! [4 J2 n% T0 |! J
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);
    & X* Z, i5 m& X6 x$ c0 |[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));
    2 O% q1 F! |# i9 H[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);( a  G" s4 J: H! q  b- `
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 d1 ~! ~1 C8 O( l
    8 z2 `( S0 _6 [3 E3 k7 W0 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;5 d9 J3 _3 N4 o! r+ D
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;
    7 V0 a2 B  _+ ]" F[color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;4 U- v' n. _* g$ F" Y  L  n/ t
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;, s' G2 R" E: f$ }5 D3 j0 {' h" |
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;: S: F8 r( g7 t) l
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;. F+ h0 {9 ~+ N5 m2 `3 e
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ( m  [7 j! a$ L

    ' r5 ?: B5 n0 ]8 Y[color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;( g* w* e' Z0 A) q0 ]. H
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;
    2 N; \+ p' n! _) i9 m7 h[color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;
    9 h- Z' G6 x: i% E[color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;
    + R+ e" h+ X: W) a[color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    3 ]. S$ H4 U% s# D' S8 w6 F3 N[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;+ Q  w+ M  ?; q0 d) e7 e, ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;- O# O3 T2 n6 ?) n3 C. c
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;3 y# I) W7 ^8 _. _% o
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;: ^, r  Y8 Q$ A1 {8 h/ ^* \
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;
    $ T: e; E* v) W' E6 M[color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;
    % G4 U# l* Y1 m- Q[color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;
    3 y2 S# q; V& r[color=rgba(0, 0, 0, 0.749019607843137)]* ]' f* l: M. b! Y8 i

    ' k4 O& D& S4 @- z[color=rgba(0, 0, 0, 0.749019607843137)]        return n1;3 m3 Y/ {5 C  t, l+ Q
    [color=rgba(0, 0, 0, 0.749019607843137)]}7 z  e: ^$ k6 j* @
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & H! R! F1 y" T. |  U
    # B8 f- {9 t+ W/ v+ R
    [color=rgba(0, 0, 0, 0.749019607843137)]int main()* R! r, d2 d: K4 i( X/ z
    [color=rgba(0, 0, 0, 0.749019607843137)]{3 L% ?5 z; ^9 J: {& P1 ]  ^$ o
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构! n7 |" Z! s$ U. q" v" Z+ b
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();- @, b7 e, h5 |/ h& c9 l3 Z
    [color=rgba(0, 0, 0, 0.749019607843137)], x) b+ h* a1 A3 z. C) X3 {

    9 O- R5 P5 I+ P, L: w( `[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历0 G- _1 P5 \5 U" Y% M+ o
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");( ?/ N$ J) Z3 p/ {( s. I% f: Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    6 N* Y' \: y" i5 _5 ^[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    1 y9 d' t; Q7 F, {* l# j[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历; {3 }/ K6 |  {, t* Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");+ I; [2 C7 I! ]/ K
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);+ c% ^8 A! d+ J6 R3 @6 a) E- K
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    " D( G( D- u1 G' Y: _+ C. X[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历+ `  T  S0 F9 A# h. A1 U. A8 @6 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");. J3 f( C) d) a$ ]. l' r
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    1 b/ b+ L$ k, @* c[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");$ R- X* x; X4 z  W2 B2 T; ~
    [color=rgba(0, 0, 0, 0.749019607843137)]) b- J  O! ?* v4 a  ]5 D

    0 T4 @2 {/ i: i- w[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;
    ! ]' \' v7 h6 [( b[color=rgba(0, 0, 0, 0.749019607843137)]}
    * O2 G  y% [1 E8 O9 J5 x* T[color=rgba(0, 0, 0, 0.749019607843137)]1
    1 z$ H6 i8 d: B[color=rgba(0, 0, 0, 0.749019607843137)]2
    1 D  X0 Z; ^) v1 V+ P[color=rgba(0, 0, 0, 0.749019607843137)]3# T6 S' Q7 t- m& C( T
    [color=rgba(0, 0, 0, 0.749019607843137)]4+ Z' k* x! f8 I# P* @
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    " q" Y+ P; l; y1 y/ s! d[color=rgba(0, 0, 0, 0.749019607843137)]6" L; c3 @+ x3 z* c$ _% j
    [color=rgba(0, 0, 0, 0.749019607843137)]7" n% v. N  i2 N4 W& u+ D* K
    [color=rgba(0, 0, 0, 0.749019607843137)]81 I# P+ y  t9 I; E5 W
    [color=rgba(0, 0, 0, 0.749019607843137)]9) ?4 x$ m, y0 X  y  l, F7 y
    [color=rgba(0, 0, 0, 0.749019607843137)]10, ~+ [7 t9 t' o4 g3 B8 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]11# e  ~$ v5 O( ~
    [color=rgba(0, 0, 0, 0.749019607843137)]12. F0 P& B: ~! d' `3 l+ B
    [color=rgba(0, 0, 0, 0.749019607843137)]130 T8 |) c9 R; k, k: S* s2 `$ H4 g
    [color=rgba(0, 0, 0, 0.749019607843137)]14  t! \( o& V1 i' L
    [color=rgba(0, 0, 0, 0.749019607843137)]15" |' V4 h( j8 S
    [color=rgba(0, 0, 0, 0.749019607843137)]169 U2 j2 B0 N6 r3 [& N) S; o9 b
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    5 i. K. v0 t9 ^5 O- w[color=rgba(0, 0, 0, 0.749019607843137)]18, P/ \: m# q% l$ z
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    9 ~9 g6 D# i4 J% X7 k, ^) |5 p+ F[color=rgba(0, 0, 0, 0.749019607843137)]203 w, f3 e' z( s
    [color=rgba(0, 0, 0, 0.749019607843137)]214 s. E+ C0 O- Q  H
    [color=rgba(0, 0, 0, 0.749019607843137)]225 |  W: e# o% `4 u/ y: E* j
    [color=rgba(0, 0, 0, 0.749019607843137)]23
    9 D7 t# ?6 B: ]: v. A, w" T5 y& N[color=rgba(0, 0, 0, 0.749019607843137)]24' x9 c* }  p: S" s' m1 x
    [color=rgba(0, 0, 0, 0.749019607843137)]25/ O3 w- V. F; l" J6 b5 J8 x" n
    [color=rgba(0, 0, 0, 0.749019607843137)]26
    % u' Y9 v& b5 E7 h" g- c, Q4 S$ ^[color=rgba(0, 0, 0, 0.749019607843137)]274 C. C7 C4 Q+ B0 b  V; v0 s# k
    [color=rgba(0, 0, 0, 0.749019607843137)]28' j2 h6 z6 ]) x0 H; C7 k  C; c
    [color=rgba(0, 0, 0, 0.749019607843137)]29! f( u; D4 J8 W/ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]30; b3 Z& x) E4 i% _
    [color=rgba(0, 0, 0, 0.749019607843137)]31# ]  g6 R, u' B  c, Y. D7 m* g
    [color=rgba(0, 0, 0, 0.749019607843137)]320 K4 x' A3 Y* J$ x
    [color=rgba(0, 0, 0, 0.749019607843137)]33
    # q( \4 p# j" a[color=rgba(0, 0, 0, 0.749019607843137)]34
    * |; }- c/ \+ a, O[color=rgba(0, 0, 0, 0.749019607843137)]35
    6 i& ?# T% e) ~[color=rgba(0, 0, 0, 0.749019607843137)]36
    9 n. j& @2 j2 C/ j. |! K1 T[color=rgba(0, 0, 0, 0.749019607843137)]37
    $ {' ^& ?9 a! P+ r6 X4 _/ A1 n[color=rgba(0, 0, 0, 0.749019607843137)]38
    1 F' _7 n% m( K1 P8 N& {[color=rgba(0, 0, 0, 0.749019607843137)]39
    2 x% y5 o- h+ v& t" H[color=rgba(0, 0, 0, 0.749019607843137)]40
    2 ^+ q/ k" G% o/ p8 ?[color=rgba(0, 0, 0, 0.749019607843137)]41
    / g2 N( n$ j2 {2 O' x[color=rgba(0, 0, 0, 0.749019607843137)]425 w  i$ Z' B9 o; Z2 C+ `
    [color=rgba(0, 0, 0, 0.749019607843137)]43
    & }$ e! U3 T  H  l1 V+ S9 c' T[color=rgba(0, 0, 0, 0.749019607843137)]447 i- N: P! g6 ^$ s4 W8 ]3 z
    [color=rgba(0, 0, 0, 0.749019607843137)]45
    ; I6 L8 Y3 }+ @7 R" N! r[color=rgba(0, 0, 0, 0.749019607843137)]46# }6 ]: Q; c  l0 [0 ]" K+ Q7 m
    [color=rgba(0, 0, 0, 0.749019607843137)]47
    $ l& d' c& ~4 h) r[color=rgba(0, 0, 0, 0.749019607843137)]48+ p- O4 S" p! {. _
    [color=rgba(0, 0, 0, 0.749019607843137)]490 q9 D  Q' N& b$ V- k9 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]505 V' x* k/ j* a, ]
    [color=rgba(0, 0, 0, 0.749019607843137)]51. r% D; _$ z( [* U4 X
    [color=rgba(0, 0, 0, 0.749019607843137)]52
    - d9 V. t- N, g6 N& Z[color=rgba(0, 0, 0, 0.749019607843137)]53
    / a) ~; \1 v/ r8 h7 k[color=rgba(0, 0, 0, 0.749019607843137)]54- F7 t3 T5 k. L& v2 N
    [color=rgba(0, 0, 0, 0.749019607843137)]550 c1 R8 Q" z: X& R1 J* e
    [color=rgba(0, 0, 0, 0.749019607843137)]56$ @; K( j9 [8 I6 k( i3 w
    [color=rgba(0, 0, 0, 0.749019607843137)]57
    6 U7 O  v" B5 h3 r4 _9 }[color=rgba(0, 0, 0, 0.749019607843137)]58
    : {7 n$ \  Y5 E9 b[color=rgba(0, 0, 0, 0.749019607843137)]59
    ' L; Q9 N5 C- N( @[color=rgba(0, 0, 0, 0.749019607843137)]60( g8 |8 E2 F" U& M* _. c! I2 r
    [color=rgba(0, 0, 0, 0.749019607843137)]617 s) ?* E" u% Y6 K# Y6 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]624 l+ J2 w/ c& t: v0 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]63! Y' w( F  \. x- ?2 {
    [color=rgba(0, 0, 0, 0.749019607843137)]64
    : W0 S5 t! r5 P- t( a* h8 J[color=rgba(0, 0, 0, 0.749019607843137)]658 t* u! D8 v# Q; |, z& U+ i8 c7 v4 a$ D
    [color=rgba(0, 0, 0, 0.749019607843137)]66
    2 p: F0 l/ U" D4 U. P[color=rgba(0, 0, 0, 0.749019607843137)]67( D2 Z7 S5 {& K& \
    [color=rgba(0, 0, 0, 0.749019607843137)]68
    ; l, V% a, |2 g) Q, `% Y# V1 e[color=rgba(0, 0, 0, 0.749019607843137)]697 r4 v: Y- n1 x; h' L
    [color=rgba(0, 0, 0, 0.749019607843137)]70
    6 [* z& w/ K3 Q. s; y% @[color=rgba(0, 0, 0, 0.749019607843137)]71
    6 I* T  b7 Y4 N& x. d" I9 ~& H' y[color=rgba(0, 0, 0, 0.749019607843137)]72
    1 S1 {# `# I6 S) U+ a" K% e[color=rgba(0, 0, 0, 0.749019607843137)]736 k7 d, B8 }2 ?% _
    [color=rgba(0, 0, 0, 0.749019607843137)]74
    3 W& w7 u" u# C0 M0 P# |+ k) A[color=rgba(0, 0, 0, 0.749019607843137)]75
    7 C: Q& q0 G* D+ ~[color=rgba(0, 0, 0, 0.749019607843137)]76" G9 l2 K7 p" |5 r+ P
    [color=rgba(0, 0, 0, 0.749019607843137)]77* U# o: E1 G! T0 c4 ]9 {
    [color=rgba(0, 0, 0, 0.749019607843137)]78
    * u/ G/ @8 V) A/ U4 J[color=rgba(0, 0, 0, 0.749019607843137)]79. U6 B9 X' s$ _
    [color=rgba(0, 0, 0, 0.749019607843137)]80! g! A9 h( q" f3 ?& m" l
    [color=rgba(0, 0, 0, 0.749019607843137)]81& C! P0 w. \3 r) q2 Y& j1 ]2 Z7 J
    [color=rgba(0, 0, 0, 0.749019607843137)]82
    5 A, p" {0 R9 H[color=rgba(0, 0, 0, 0.749019607843137)]83; k% y5 `1 C5 O
    [color=rgba(0, 0, 0, 0.749019607843137)]846 B1 U" h. g. i$ m' W" Y/ j9 |
    [color=rgba(0, 0, 0, 0.749019607843137)]85% [- K2 h3 Y5 K7 r* i9 \
    [color=rgba(0, 0, 0, 0.749019607843137)]86" g9 D) s: I# ?) u/ k* B( Y
    [color=rgba(0, 0, 0, 0.749019607843137)]87
    $ i5 X* |, q" I9 g8 Z8 P( z[color=rgba(0, 0, 0, 0.749019607843137)]88
    ' L9 \% c+ k: U* [/ z[color=rgba(0, 0, 0, 0.749019607843137)]89$ w- I7 Q. ~" l! o* R, c
    [color=rgba(0, 0, 0, 0.749019607843137)]90
    ( ^$ m" M2 X' p, \8 \$ f[color=rgba(0, 0, 0, 0.749019607843137)]919 J# c& K* B+ t7 I4 v
    [color=rgba(0, 0, 0, 0.749019607843137)]92
    ' |9 P( _- h7 h[color=rgba(0, 0, 0, 0.749019607843137)]93
    7 j0 c, E' y0 H4 o: f& M[color=rgba(0, 0, 0, 0.749019607843137)]947 l) n" |# x, X+ `! l
    [color=rgba(0, 0, 0, 0.749019607843137)]95
    0 B9 {5 p, y8 M; s" M0 D" D( N[color=rgba(0, 0, 0, 0.749019607843137)]96% F6 @+ X8 K+ m0 w# D: j
    [color=rgba(0, 0, 0, 0.749019607843137)]976 c1 A+ O+ l4 f& r
    [color=rgba(0, 0, 0, 0.749019607843137)]98
    3 C" U' ?* V: o/ y9 R[color=rgba(0, 0, 0, 0.749019607843137)]99/ e, t& {. S! g( O, p" I# Z
    [color=rgba(0, 0, 0, 0.749019607843137)]100) {: I9 W7 Z4 @% Q, \
    [color=rgba(0, 0, 0, 0.749019607843137)]101
    4 R6 e: R2 c# W! w% t0 J! ]2 e+ B[color=rgba(0, 0, 0, 0.749019607843137)]102" I% T7 F. B. n4 b" a
    [color=rgba(0, 0, 0, 0.749019607843137)]103
    % b% S6 n2 M* w. M: d1 R/ @[color=rgba(0, 0, 0, 0.749019607843137)]104
    : t' H( J' {- e! @% N) O5 i5 ^[color=rgba(0, 0, 0, 0.749019607843137)]1054 c% \$ Q8 q  d7 K+ N6 ~& \
    [color=rgba(0, 0, 0, 0.749019607843137)]106
    9 c* W3 P$ `/ j8 u% ?[color=rgba(0, 0, 0, 0.749019607843137)]107
    , }6 v& r# v# d& m[color=rgba(0, 0, 0, 0.749019607843137)]108
    : W4 z# W& _* x[color=rgba(0, 0, 0, 0.749019607843137)]109' Z' A4 ], O* R4 o" K' z
    [color=rgba(0, 0, 0, 0.749019607843137)]110& _6 @. \6 [1 ~+ z6 o
    [color=rgba(0, 0, 0, 0.749019607843137)]111( y  L: l8 ^4 N4 h1 x0 \
    [color=rgba(0, 0, 0, 0.749019607843137)]测试结果:  j0 n, e& V2 O# b. P8 P5 E
    [color=rgba(0, 0, 0, 0.749019607843137)]2 D' ~( @; R9 W" A$ c
    # a& {- D5 T  J0 _7 B7 S$ S0 M  l
    [color=rgba(0, 0, 0, 0.749019607843137)]
      D& B( {: K6 |5 b- x$ M8 Z

    8 P0 v: }7 k$ ~: H. s! L8 U[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小$ ^4 o$ F. @/ b. p' j
    [color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)# \  w- @2 e3 w6 u$ p! A1 j& t- W: z: {4 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]+ D5 z& \1 D. x$ v4 B: q

    4 [& r% {- ]" h& L4 a) S7 v5 a% {[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小# X/ Y+ E. }  L* X
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量8 ~" f0 q2 o- u3 U
    [color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;: Z( v* z/ D7 a1 h* `  |% X
    [color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)  F0 {+ k. z! I/ T; f6 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]//{
    ; `0 }; R" N& H! b3 a# j  {[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)
    2 S2 t, o: @& Z. a[color=rgba(0, 0, 0, 0.749019607843137)]//        {- l0 j. j  \7 X3 W
    [color=rgba(0, 0, 0, 0.749019607843137)]//                return;
    6 r' o# M# J; n! I[color=rgba(0, 0, 0, 0.749019607843137)]//        }$ B- A+ S; i) K( F8 k# Z
    [color=rgba(0, 0, 0, 0.749019607843137)]//        count++;
    * O* F& |( }  V  a* m, k+ S[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);
    & Y$ d9 d. F+ ?[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);& v7 W, N. f# p$ J; g
    [color=rgba(0, 0, 0, 0.749019607843137)]//
    " F: F' Q! q1 t2 o8 |% x[color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量$ D' A9 s6 i& Z  X" Z& e
    [color=rgba(0, 0, 0, 0.749019607843137)]//}5 P' E! v* Z  H% v% R
    [color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之3 }4 H9 U+ d8 P8 X5 n5 d- P# n
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)
      Q( h) d1 l3 y' c; P. O2 W[color=rgba(0, 0, 0, 0.749019607843137)]{
      i# \7 o$ w- J! O+ Z" p# I[color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;# u1 B8 W0 S# q+ e" Q
    [color=rgba(0, 0, 0, 0.749019607843137)]}6 @8 p. X: Y; q' F& x
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    5 A' E2 [0 D0 ~* W" R[color=rgba(0, 0, 0, 0.749019607843137)]26 ]& o8 }* E3 [8 |
    [color=rgba(0, 0, 0, 0.749019607843137)]3( n9 o$ s$ Z/ A
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    " p% _- ]. U, e0 V8 W[color=rgba(0, 0, 0, 0.749019607843137)]5! A5 V: d" p# U8 R5 a  {
    [color=rgba(0, 0, 0, 0.749019607843137)]67 U4 \9 S+ r" Y/ k  t
    [color=rgba(0, 0, 0, 0.749019607843137)]7
      E% s* B9 n& l! z3 C' R5 M1 _[color=rgba(0, 0, 0, 0.749019607843137)]8
    ; L7 a; W3 l' @4 d[color=rgba(0, 0, 0, 0.749019607843137)]9. r# y# G6 U" @. r
    [color=rgba(0, 0, 0, 0.749019607843137)]10& p' f2 s7 W- v. j6 w+ f+ @! k
    [color=rgba(0, 0, 0, 0.749019607843137)]118 e/ u1 t) M/ S( P# g6 E6 S
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    6 n' U* K# m, Q: H8 m, t[color=rgba(0, 0, 0, 0.749019607843137)]13
    5 d+ \# |3 ?5 D- I$ P. ?; {[color=rgba(0, 0, 0, 0.749019607843137)]14- X/ f' X: P6 u: n3 n8 D1 b
    [color=rgba(0, 0, 0, 0.749019607843137)]15
    - x: @+ N* B2 R) R. @' T[color=rgba(0, 0, 0, 0.749019607843137)]16( Q1 Z! T. h" z2 A% w  Y
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    4 S( r% E- E0 u[color=rgba(0, 0, 0, 0.749019607843137)]18: ~) Q5 O2 Q/ I
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    % ~7 H) M/ j9 `7 F) A" J" @2 Q[color=rgba(0, 0, 0, 0.749019607843137)]208 {4 `  L( f$ L7 k" G
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数( J8 H$ H- T! a& X/ f
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数" T/ x* C8 q- n$ n
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)
    5 a2 A! w4 F- T5 t- X# y! y, d[color=rgba(0, 0, 0, 0.749019607843137)]{
    - R0 X. g; |8 j/ U1 e7 A[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点9 D/ N4 [4 g0 G! E6 b' G* ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    $ a% v; N' M  r5 O[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    + e- ?0 O% t5 h+ B2 g[color=rgba(0, 0, 0, 0.749019607843137)]        }1 j0 d2 h" b/ _8 @  f
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空+ w( w1 K7 G5 v5 E
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)
    . m( D9 Q8 N! e' R: d1 t! m[color=rgba(0, 0, 0, 0.749019607843137)]        {
    5 _3 k- r, ]7 g; N' |% q2 D$ j8 D[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;( `3 j2 ]9 l* @% M) n
    [color=rgba(0, 0, 0, 0.749019607843137)]        }6 \! J9 h! i4 z  [7 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);
    7 }0 j. ?$ G3 b/ w[color=rgba(0, 0, 0, 0.749019607843137)]}$ @9 t0 X# \' G0 l7 ~; ]
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    8 G9 p8 @9 [! u* w' P2 C- A; u[color=rgba(0, 0, 0, 0.749019607843137)]2
    . ?) e$ U+ }; b2 A, K6 F) b, |[color=rgba(0, 0, 0, 0.749019607843137)]39 u1 I' r5 @8 r! l/ J+ G6 z
    [color=rgba(0, 0, 0, 0.749019607843137)]4+ j, w* G: L' o) d" y( f$ Z3 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]54 L8 I6 j. N& i
    [color=rgba(0, 0, 0, 0.749019607843137)]6% j# d) H( V% b2 N- X9 K$ W
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    " {4 D! s8 _' x- K[color=rgba(0, 0, 0, 0.749019607843137)]86 K- w9 T( ?: A. k
    [color=rgba(0, 0, 0, 0.749019607843137)]9
      Y' g  l/ G/ G. @3 m4 @[color=rgba(0, 0, 0, 0.749019607843137)]10; ]8 P$ K% G! m3 }, U
    [color=rgba(0, 0, 0, 0.749019607843137)]11. E$ I& ?2 ?: U* _' f# E2 M& q
    [color=rgba(0, 0, 0, 0.749019607843137)]127 T5 M- E( r* Z, ~" r) k
    [color=rgba(0, 0, 0, 0.749019607843137)]13; q: i* r$ \; b* U. G, v5 P7 s
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    2 b) |  m" ^6 N. a' B: U+ Y[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    2 b, z% e, ^5 c) I! y[color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)
    , _; v6 r- N  ~4 D, z[color=rgba(0, 0, 0, 0.749019607843137)]{; p0 M! f* K6 i5 A1 u9 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0
    0 Q. g6 [. x* A4 D# E[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)+ J8 F4 f+ Z0 Z) ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    0 u$ ~0 j/ _  j4 {[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;% L- i$ V' d) N& o4 n! D- @
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    $ y! B8 V. b5 D& ^( O1 d6 ][color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树
    2 Q* \1 S: e9 ][color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度* T$ y' Q/ C: Z, ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    # o; d" e5 W+ w( z  t[color=rgba(0, 0, 0, 0.749019607843137)]
    * \* l' o* R$ y& k& T
    $ J9 [/ N% Y* q: k: q/ q5 G  a
    [color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;
    . K! w+ G5 L  q9 `" [* q* |[color=rgba(0, 0, 0, 0.749019607843137)]}1 y+ ^5 S# h9 p3 V
    [color=rgba(0, 0, 0, 0.749019607843137)]1" C. U' v; `$ A+ B* {
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    & E3 s* C: h3 p: x, K/ ?$ C[color=rgba(0, 0, 0, 0.749019607843137)]3
    " e/ ^8 `3 }# S9 Q: r[color=rgba(0, 0, 0, 0.749019607843137)]4
    ; A+ ]* b# p; D' N7 s9 t[color=rgba(0, 0, 0, 0.749019607843137)]5
    , h7 _2 L6 c$ S2 b8 X[color=rgba(0, 0, 0, 0.749019607843137)]67 s% _  ~* R- m: a, a: J
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    7 U1 V- v- h6 ?[color=rgba(0, 0, 0, 0.749019607843137)]8
    6 C) U3 R6 `/ ]/ o[color=rgba(0, 0, 0, 0.749019607843137)]94 P7 d: c1 G: [$ P3 ?, C2 @1 @
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    ( j9 F8 q" O5 z4 k[color=rgba(0, 0, 0, 0.749019607843137)]118 _6 a  }4 {, _' S- K# D3 w  U- O
    [color=rgba(0, 0, 0, 0.749019607843137)]12) s+ a) m6 k+ F; s8 D) F6 y& G
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    , [8 L! H$ H) w; `3 A[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    ( x- Y& d( c: ^[color=rgba(0, 0, 0, 0.749019607843137)]
    5 _/ v% @$ v% A, i

    : B# V1 j$ l/ ?; |! Q! T[color=rgba(0, 0, 0, 0.749019607843137)]
    8 A9 _" n+ S, t$ t

    0 R# ]& ~6 W/ ~- l& [6 o$ ^* G( D[color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。
    9 _3 n* |) [0 M1 G+ X) F" o[color=rgba(0, 0, 0, 0.749019607843137)]; Z) T$ J2 s" x* w' U4 ^
    ) A8 s9 A1 S& ]; n8 T, v5 V
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数, C& X& V+ z3 R" \$ U
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)$ O% e; B3 }! t0 X  i
    [color=rgba(0, 0, 0, 0.749019607843137)]{: q9 U  }: R0 @& I/ P7 h8 T
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);- }+ |/ n4 S  m' L; `, S( \7 o
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)5 n$ Q! W' T7 k: O& ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        {$ ]) [4 X, d, k
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;) u/ Q/ n, g: j4 z3 D1 r
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    4 R% ~+ M# ~9 |( f7 W[color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)! E, L( l% O4 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1); V0 h/ v* Q9 d8 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    ' x/ q# p. X/ r! V* m[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;6 t2 l% u* z. f' X* O5 k$ |
    [color=rgba(0, 0, 0, 0.749019607843137)]        }. R5 X4 J: `! w4 x" I0 [
    [color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层
    . Z6 A9 j: f/ S7 B[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);. I3 C/ t) w1 M; {- S
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    2 v6 I0 H; F! G[color=rgba(0, 0, 0, 0.749019607843137)]18 l5 K6 Q* w+ ?6 G# C
    [color=rgba(0, 0, 0, 0.749019607843137)]2. X; v( |: X& d' y! Y
    [color=rgba(0, 0, 0, 0.749019607843137)]33 `; j% v+ R3 r# y
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    / C( |! t$ M% i  S/ G; s/ q# b[color=rgba(0, 0, 0, 0.749019607843137)]5
    4 i- j- f9 O0 t4 Y4 @; e; R9 a[color=rgba(0, 0, 0, 0.749019607843137)]64 `# d+ B- a% `' v! B: {6 @3 t* @
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    8 {" ~) r  U! _. U[color=rgba(0, 0, 0, 0.749019607843137)]8
    # P/ z) Q/ N' N[color=rgba(0, 0, 0, 0.749019607843137)]9
    - L- K. F5 B  @/ E$ S. t! K[color=rgba(0, 0, 0, 0.749019607843137)]10
    ( ]) n( U$ }  G8 Z% Z( a0 i[color=rgba(0, 0, 0, 0.749019607843137)]11* \3 O4 g6 z. k3 E3 U  v4 z2 d4 u" s
    [color=rgba(0, 0, 0, 0.749019607843137)]12. G  o1 j# O) `- ?/ @! ]' U& A5 w
    [color=rgba(0, 0, 0, 0.749019607843137)]135 K# s7 R5 Z6 u' T; {, U4 t
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    7 z8 B/ P0 X0 X! O[color=rgba(0, 0, 0, 0.749019607843137)]15
    2 Z3 e5 Z4 Y: j: H' Z) r[color=rgba(0, 0, 0, 0.749019607843137)]16  R0 C2 s" F+ c# I5 u& j
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    . `9 F" k9 P7 n; \[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找2 [6 f0 R* l# E% }
    [color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    # S0 O5 z, ?# b5 B  V[color=rgba(0, 0, 0, 0.749019607843137)]{; d! c6 U# O5 V2 b
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    8 Q2 T* L* |. u5 s7 K, j/ N[color=rgba(0, 0, 0, 0.749019607843137)]        {! h( U" f6 O/ \7 E
    [color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;3 T6 w# i' R/ o9 d* D. s3 p0 ~8 u6 B& B
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    / l* G0 N6 a& a5 T[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)4 d$ ~" f) f) a
    [color=rgba(0, 0, 0, 0.749019607843137)]        {# Q) _) O5 [  k
    [color=rgba(0, 0, 0, 0.749019607843137)]                return root;1 r  o% g7 I6 d3 g" l
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    - B* l* Q2 s0 j& A' M[color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树
    9 ~7 v1 D; d$ @( M& H; `! r[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);0 e& d: v2 h, ~: [
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)7 z/ w# m7 e4 ?1 T* Z
    [color=rgba(0, 0, 0, 0.749019607843137)]                return lret;0 P9 {9 Y' l- L5 C. N0 D& ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树/ c1 B; |9 Y9 Y% K0 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);1 ?% Z3 W$ C% {* u0 g
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    % j/ j0 L# n9 [( ^' C) y[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;) ?1 |+ }7 k0 `  O& j! j& k" |
    [color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;
      `4 ~+ y: D8 j+ L: h" {[color=rgba(0, 0, 0, 0.749019607843137)]}
    # n6 ?6 ]4 w1 y, c6 [2 n[color=rgba(0, 0, 0, 0.749019607843137)]————————————————
    % Y( O8 i- [% R3 `- [[color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    1 ]1 z- R% _( C; F5 b[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212
    6 y6 `# I. s3 I0 c
    7 T+ K: W! j, b" b7 a. y4 H% R0 b7 z/ C6 U) X. c6 T& o7 G( j
    [color=rgba(0, 0, 0, 0.75)]
    6 V$ Q/ u" V- r) `9 K; n

    2 I7 E8 d5 Q0 D0 S$ P% _
    ( h' n3 v! K0 \$ F, ]
    + W) d5 r! t+ f8 I0 M
    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-7-10 09:26 , Processed in 0.508402 second(s), 51 queries .

    回顶部