QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2474|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历
    6 {$ R$ D8 X6 |/ |; n/ S
    4 A% Q$ A" \  x! F  M0 ~[color=rgba(0, 0, 0, 0.749019607843137)]文章目录
    2 r2 Y1 m, l3 z* m$ \# J[color=rgba(0, 0, 0, 0.749019607843137)]前言
    ; W% e- n: B2 l: F3 d[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    6 a0 r  h9 |" Z4 S* w[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现), i5 h' ]6 B* E8 [& m
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    4 B* y: E# q0 M; }& M$ t5 D[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小- g, \2 E$ d. c# w
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数4 Y$ U$ i7 ~7 e& t0 Z/ o
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    9 U" |5 S7 [+ e[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    8 x: [" k* A2 H& J[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    , X: }; v: D& P1 `2 M: F[color=rgba(0, 0, 0, 0.749019607843137)]前言
    2 G$ a' ?& X! O4 K4 \9 W% P[color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。( _0 f1 V4 W# o2 k$ ~% N
    [color=rgba(0, 0, 0, 0.749019607843137)]1 X& \. k8 p8 G1 P5 \

      f! q" F' U1 l/ ?0 U[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    4 s" s; o$ ^: j: W# i/ R[color=rgba(0, 0, 0, 0.749019607843137)], ^& c" _* I/ w6 U" R  x

    7 g  ?- z9 N' _' w% g" u1 K' V[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:  {; K" Q2 @, |. J- [9 L
    [color=rgba(0, 0, 0, 0.749019607843137)]
    5 c2 G, Q1 f4 K: ^; d

    9 c: }7 e/ z( |7 X6 n, Z: E5 Y[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树  w& D- n& ]& ?& X' U; A) C
    [color=rgba(0, 0, 0, 0.749019607843137)]
    - P9 t* M0 m# ~# C+ T. T

    ' e# J. V  d' n% D0 P[color=rgba(0, 0, 0, 0.749019607843137)]
    " Y  p( g1 y. e, e9 k# h8 O$ c

    ) g4 b) @& s5 `[color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树
    - W# I9 l4 Z* D1 s2 @[color=rgba(0, 0, 0, 0.749019607843137)]% `& Y9 t7 S- j! ]' I- E0 e

    # v5 Y: o0 U& E& `( X! I[color=rgba(0, 0, 0, 0.749019607843137)]
    * ]4 {' r' ?+ E
    " M3 _* W5 X( i7 l' p
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根
    ' G/ h+ ^2 P3 R/ ^2 s( y3 T[color=rgba(0, 0, 0, 0.749019607843137)]
    2 n0 w. o. E7 }/ j) [) E
    $ v% u7 ~# K9 K4 g. i2 K
    [color=rgba(0, 0, 0, 0.749019607843137)]1 m) A- n3 Q0 O* {2 M* p

    ; Y  n/ f0 M5 Y! _[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)  \& {, `6 U& N  ~4 d9 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之
    " y% e# a8 C! V" @[color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;
    " c8 D- V/ [7 a) l8 b4 S[color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;* h$ C6 ?, |  L# _4 f1 g/ A
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);
    2 N5 e# Z! R% u& m9 {' R' `- ?: e[color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);- J( f9 ?) {% e1 @" D8 E: F
    [color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);
    , j2 m' d( _$ P$ A1 L" H( q[color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);8 O6 k6 J7 @& M' ]+ C
    [color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。
    # S* ^" h$ |2 D' G0 [. m! [6 J[color=rgba(0, 0, 0, 0.749019607843137)]
    / S) q( Y8 r' V& t
    " I6 d" L; w* A) J$ C/ Z
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历8 a# D) V! r6 V; e/ B4 h
    [color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    6 j) x0 z* e" @) r9 u3 l[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>
    - M# z% B0 E: t7 V[color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>
    3 {6 Z: O9 J5 a' G. B[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>
    7 O3 }0 v& c0 O4 C9 G$ M[color=rgba(0, 0, 0, 0.749019607843137)]
    4 C  @9 b+ s% V( r5 ]# W0 u/ o
    - m& f) ^8 E9 ?7 C$ w
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;
    ! w7 l2 z: e9 i" p1 h) e+ P[color=rgba(0, 0, 0, 0.749019607843137)]; W" m8 V7 P# o: ^- g
    " E" b8 l) [1 b3 v+ \# ^
    [color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体
    - J- Z& b9 n& L6 s8 Z[color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode5 l+ ?5 S8 f: J; ?0 Z; T  p
    [color=rgba(0, 0, 0, 0.749019607843137)]{: q- w8 ?! B! r# w4 C  M' O
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;  r$ f  H, l1 U* D
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;
    & y( h- f9 Y; [; b8 \# A[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;( t8 i% G+ R) |: s. a: B# F
    [color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;/ E1 G0 U. z4 w1 |7 A
    [color=rgba(0, 0, 0, 0.749019607843137)]' ?+ G# _0 s1 h4 r

    : B4 Z5 a2 i, w) x) H[color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历* L0 c1 T' I- i
    [color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    8 B4 Z9 S2 C. P0 p- ?[color=rgba(0, 0, 0, 0.749019607843137)]{+ h) `' w, e, \2 \
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)! k1 m1 T; b8 [& u
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    & C+ |/ R) X9 c& d  ][color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    0 k9 g# N' G* I* I[color=rgba(0, 0, 0, 0.749019607843137)]                return;$ Y% R" ]4 Y) a, q- Y3 j: `
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    . l2 C( P8 F# V# R% j  m[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);  L# i5 Y* ^$ \: I& t1 l+ @
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);2 _$ O% i3 r) |  n, _
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);
    6 [9 a' m0 I3 C# L9 K- u[color=rgba(0, 0, 0, 0.749019607843137)]}
    , V3 w3 L) Y9 M  q1 @[color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历, W2 a: r; y6 p/ A4 a( Z
    [color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)  ~% d8 X; u& x% e: T4 y0 n
    [color=rgba(0, 0, 0, 0.749019607843137)]{" y* |4 p& d' [9 I* T( A
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    8 I7 z, Y& R- @! s[color=rgba(0, 0, 0, 0.749019607843137)]        {  o' ]( \! H2 N* S% E; c, L. ~. h
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");# S; O. s* `# o. ~
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    8 q+ Z2 G5 V: X; x- j, o$ M! J$ B[color=rgba(0, 0, 0, 0.749019607843137)]        }
    # d; r* x+ b4 B! @8 I$ J' q0 z( S[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);5 |3 }) D0 @0 g# U& J9 D. c
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    + p" ?/ i/ N3 [; P: U[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);
    : y- P6 e* ?1 J6 k; k6 C[color=rgba(0, 0, 0, 0.749019607843137)]}
    9 K. ~7 [3 I1 {) s$ [[color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历
    # o' m/ U" |9 b% E# a[color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)
    + I9 }+ X2 y8 |' J' p5 I$ P) V: ~0 v6 m/ J[color=rgba(0, 0, 0, 0.749019607843137)]{4 `6 n  P8 E. ]* }5 O
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)' W# `1 R+ }. w
    [color=rgba(0, 0, 0, 0.749019607843137)]        {' X* v* K$ x- q) _: r4 W
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");5 g( b8 Y/ }7 i
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    1 W/ F- n) {" @; G. f6 l+ n3 s$ a3 L[color=rgba(0, 0, 0, 0.749019607843137)]        }  v* q* H5 ~+ q# b6 w
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);7 F$ Q, `: \4 @6 w/ t# p3 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    : s- _$ Y$ {0 C2 U[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    ; j6 s9 Y( A$ m% o( s7 Q" x[color=rgba(0, 0, 0, 0.749019607843137)]}5 @6 V! @- R' i& e
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    + ?- B  x4 o3 i[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()4 K7 ~- {; u$ }/ J  D6 @
    [color=rgba(0, 0, 0, 0.749019607843137)]{' o4 N8 M6 O: _* x1 d' Y/ L+ P! V
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间
    4 S6 c8 Y, M; Z3 Y[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));
    7 M) ?, ?4 N$ H. s% U[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);
    : q* r$ B) j* l" w) ~' \[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));4 W" n7 F# J2 i$ r
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);: V8 q) ?2 X1 `6 r7 B: n6 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));
    5 X7 G/ @# O. w5 l- C+ r( h[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);$ D+ z6 d$ V. ?* l
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));4 E7 j# T. U- f$ G( P5 |; b
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);- l0 R3 v" O* \' g9 r% l; x# |* A7 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));& }6 ?. U; \; O! y4 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);5 C& G* t4 _7 Z! r) @+ Q6 X
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));
    . P" o1 C' s8 P+ a+ P- ^[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);
    0 P; q/ n9 k( f' a/ J) e[color=rgba(0, 0, 0, 0.749019607843137)]0 o. d% Y& Y/ O
    - a( |; I7 O, {! P2 C
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;% ^5 N# C! M- g) j! H
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;2 W+ |6 C! v# Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;6 `3 M! k1 V, O
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;
    8 K) ^. [# e- U/ L' ^[color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;9 t) q* \, C5 P! @
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;( g4 x/ B3 G1 A. E3 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]
    % K7 Z1 P5 @6 G8 f) e' j) O2 `
    . O" d9 i% b) {% k' L
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;
    & ]" U, f; R# c  S  l$ Y% p- G5 Y[color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;- X. l% B0 w" N. J1 j# m
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;# j1 e* r+ u% I/ R
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;7 D- \1 p: ~% R1 c) U5 }
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    / ~9 w  c# Y1 ?6 c! @6 `[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;
    5 W# g% ^8 P5 b: q; K[color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;0 v8 q7 ?5 a6 H( _6 A% q
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;& ^3 C% j7 g' {6 a& j
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;
    ; d3 Z% E& m* |4 X[color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;1 ]; r) J4 j* Z: }- h, J
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;
    6 k) ]9 d' u% ^! E! Z- v& m[color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;8 s; W) _; m2 w; i
    [color=rgba(0, 0, 0, 0.749019607843137)]
    - z. G" a$ p3 _8 `, Q* l& [/ z
    % y/ Y+ O( B9 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        return n1;6 f* P/ f$ H  R
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    2 s7 U1 H) X5 K% C* y[color=rgba(0, 0, 0, 0.749019607843137)]
    6 u4 v( n( _2 `3 o4 @

    # O+ o2 i3 U0 E/ l  a3 `[color=rgba(0, 0, 0, 0.749019607843137)]int main(). m+ f. s+ G1 a; a" Z
    [color=rgba(0, 0, 0, 0.749019607843137)]{( h( m& l; Y* h/ U
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
    - ^# u% l; W8 }& o) W0 j[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();
    ) y( [! f8 H  y% t) e[color=rgba(0, 0, 0, 0.749019607843137)]8 T, u+ o, t1 Y. p* x! Q% m7 k
    : _  K; l" f& |& O( M
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历( |1 T, w" T  [% C; `
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");8 C; @7 {! l8 e6 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    * ?# C/ P/ Q, z6 G& J[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");# C$ x3 g; b5 T# i9 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历
    3 l; D( N6 A$ }/ |( D[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");% _0 o) A3 ?5 z$ y+ m7 ~( V
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);1 e2 v6 o3 a7 ~* X
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");& m8 L: D+ l. b4 }3 s
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历
    3 c5 n2 [" b7 x% K! b9 Q[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");
    8 q& F6 a, ?+ V' E! N- Z& P0 m[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    ' Z  j# ^/ Y* ]# z* Y* O[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
      v( B* m/ n4 O6 I0 D' g[color=rgba(0, 0, 0, 0.749019607843137)]
    . B/ B) ?1 _0 u0 l. w' B
    # ]0 i6 y' O) P1 m5 S3 t) f
    [color=rgba(0, 0, 0, 0.749019607843137)]        return 0;
    , }/ X# K3 [& l# M[color=rgba(0, 0, 0, 0.749019607843137)]}% J# v8 X8 B! J- v
    [color=rgba(0, 0, 0, 0.749019607843137)]1  U: Z3 a2 i6 `& G7 {, Y3 z  D
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    , x, c4 A4 M0 l0 f0 N( a[color=rgba(0, 0, 0, 0.749019607843137)]3
    7 d" W5 g4 y! H# w% i- {7 X/ C0 m9 x[color=rgba(0, 0, 0, 0.749019607843137)]4
    5 y3 i6 m' e( @$ d4 ^* U[color=rgba(0, 0, 0, 0.749019607843137)]5
    3 K: y' E5 t5 z5 R$ i' {[color=rgba(0, 0, 0, 0.749019607843137)]6" P8 j, s6 V) v( d
    [color=rgba(0, 0, 0, 0.749019607843137)]7" b5 |; T. D/ t' C
    [color=rgba(0, 0, 0, 0.749019607843137)]86 k# \8 [& _/ ]$ U& W
    [color=rgba(0, 0, 0, 0.749019607843137)]9( x( o1 n2 V6 D4 Z* d6 S( C
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    : Q7 b" T  p; A3 l* w$ g[color=rgba(0, 0, 0, 0.749019607843137)]11
    6 ^" M" h" S$ t3 ^( T" I[color=rgba(0, 0, 0, 0.749019607843137)]12
    5 S0 H4 n1 k3 X( H$ z' ^, X[color=rgba(0, 0, 0, 0.749019607843137)]13
    / L: ~1 o. U. t( {. {# l( p[color=rgba(0, 0, 0, 0.749019607843137)]14
    * n0 n) ^6 v' ?; e6 w7 t[color=rgba(0, 0, 0, 0.749019607843137)]155 r! O. L& I  H- @, k. f1 J$ S" A4 ^' Z
    [color=rgba(0, 0, 0, 0.749019607843137)]16& c; P! Q. ~. q$ f
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    : u( s: Q  d7 p[color=rgba(0, 0, 0, 0.749019607843137)]18
      W5 x1 l  R6 D$ T) T3 Z) {[color=rgba(0, 0, 0, 0.749019607843137)]19
    5 e: f4 M' N1 I+ S  r[color=rgba(0, 0, 0, 0.749019607843137)]20
    # c! d* `9 t7 q" E2 D$ }4 `[color=rgba(0, 0, 0, 0.749019607843137)]21
    " l( j' t" N2 X5 ^% w$ c* w1 Z[color=rgba(0, 0, 0, 0.749019607843137)]22
    , T/ D7 ^/ `1 _% H( [  S) a$ w[color=rgba(0, 0, 0, 0.749019607843137)]23
    / w" Q4 a+ q( _5 r& G0 {[color=rgba(0, 0, 0, 0.749019607843137)]24; e1 i; ^: A! h- T* y1 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]25
    : ~: p  D4 h3 S6 ~  f3 q[color=rgba(0, 0, 0, 0.749019607843137)]26
    5 k" Z* ]' u& N/ j/ b4 C[color=rgba(0, 0, 0, 0.749019607843137)]27& a  `- M5 M* a; n, j
    [color=rgba(0, 0, 0, 0.749019607843137)]28( r% f  T! |7 u$ p) h' p  l5 F
    [color=rgba(0, 0, 0, 0.749019607843137)]29
    5 f4 z' T$ E, v) I. f2 Q9 Z[color=rgba(0, 0, 0, 0.749019607843137)]30' [# B8 z) C  M  }% t
    [color=rgba(0, 0, 0, 0.749019607843137)]31
    6 L# c* y! G  U6 k2 Z/ P) V[color=rgba(0, 0, 0, 0.749019607843137)]32% Z( Z! t. M3 t8 o
    [color=rgba(0, 0, 0, 0.749019607843137)]33
    8 U; ~, c- a# Z5 v  Z[color=rgba(0, 0, 0, 0.749019607843137)]34
    / p$ u1 G* G' I$ J" H1 a6 I[color=rgba(0, 0, 0, 0.749019607843137)]35! x4 ?+ \1 H9 Q8 x* `: D
    [color=rgba(0, 0, 0, 0.749019607843137)]36
    # k: r4 F$ F2 j# I' o4 p[color=rgba(0, 0, 0, 0.749019607843137)]37
    3 u) n& d0 k5 t  R& {[color=rgba(0, 0, 0, 0.749019607843137)]38
    * Z1 b4 @  ^: x# x[color=rgba(0, 0, 0, 0.749019607843137)]39
    4 u! |0 F6 e: g; r) [* v[color=rgba(0, 0, 0, 0.749019607843137)]40/ t. d6 v% b# o" Z
    [color=rgba(0, 0, 0, 0.749019607843137)]419 U. E- p. R1 s& C4 M% ]
    [color=rgba(0, 0, 0, 0.749019607843137)]424 s2 R& p9 `5 P  Z3 g& @8 K9 }
    [color=rgba(0, 0, 0, 0.749019607843137)]43
    ! R* i( r% N, h# P9 X5 D; V[color=rgba(0, 0, 0, 0.749019607843137)]44
    " p2 a; x0 K  U& ][color=rgba(0, 0, 0, 0.749019607843137)]45; m8 ?1 F, d2 E
    [color=rgba(0, 0, 0, 0.749019607843137)]46
    " P* Z3 D+ u0 ?[color=rgba(0, 0, 0, 0.749019607843137)]47
    ( ~: o. S# c) s+ n* k2 F9 Y+ }[color=rgba(0, 0, 0, 0.749019607843137)]484 J: U  ]2 F/ H% Z2 X
    [color=rgba(0, 0, 0, 0.749019607843137)]49) }- s# D) h: J. ?
    [color=rgba(0, 0, 0, 0.749019607843137)]50
    , T0 D  C1 J7 y[color=rgba(0, 0, 0, 0.749019607843137)]51$ G3 n  Z. Q) S, G1 v/ L" o
    [color=rgba(0, 0, 0, 0.749019607843137)]52
    $ e* e" a, _, Z, l5 d7 X( q[color=rgba(0, 0, 0, 0.749019607843137)]53
    3 l+ Y. {% D; ^[color=rgba(0, 0, 0, 0.749019607843137)]54# J) p: v% g, R& c. E% q
    [color=rgba(0, 0, 0, 0.749019607843137)]55, O2 Q- J1 Y4 M5 b' Y$ _2 e
    [color=rgba(0, 0, 0, 0.749019607843137)]569 U9 d7 C/ G* M* g' x
    [color=rgba(0, 0, 0, 0.749019607843137)]57
    # F$ d+ X$ Y8 O[color=rgba(0, 0, 0, 0.749019607843137)]58
    & l" C* \# X, n4 M3 G[color=rgba(0, 0, 0, 0.749019607843137)]599 O: Q5 j8 x6 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]60/ B* ^' a1 O; e$ R; o  G( @9 j
    [color=rgba(0, 0, 0, 0.749019607843137)]61
    2 ~  M- C1 i+ k% M  {8 K* u[color=rgba(0, 0, 0, 0.749019607843137)]62; S5 R. j. k7 c, `' j* I
    [color=rgba(0, 0, 0, 0.749019607843137)]63, z! L2 H, `! l/ [8 v1 C) S
    [color=rgba(0, 0, 0, 0.749019607843137)]64) @, O0 s1 n4 y& z4 b% G
    [color=rgba(0, 0, 0, 0.749019607843137)]65
    + n! }/ s. n( h% h/ N) R[color=rgba(0, 0, 0, 0.749019607843137)]66
    9 R  L5 H& `6 C3 z/ s2 b3 M" y[color=rgba(0, 0, 0, 0.749019607843137)]67$ f9 m% s9 \# r, P: O: n# w. ~4 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]68
    / F; \* Y! f6 _2 h5 r[color=rgba(0, 0, 0, 0.749019607843137)]69% y  r! }( Y; ?5 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]70) L1 C+ a0 u% \; n; I, ?
    [color=rgba(0, 0, 0, 0.749019607843137)]718 F8 X& B- ]1 A. a2 W
    [color=rgba(0, 0, 0, 0.749019607843137)]726 h( j  W$ q* s# ~
    [color=rgba(0, 0, 0, 0.749019607843137)]730 g; S, K# o. L9 @  n/ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]74
    9 G+ ?; Z0 x1 Y5 W; I[color=rgba(0, 0, 0, 0.749019607843137)]75- s# x5 t& E2 Z/ e
    [color=rgba(0, 0, 0, 0.749019607843137)]76& p/ [3 a. y2 P& O
    [color=rgba(0, 0, 0, 0.749019607843137)]776 F' t. V6 I" d/ ]: f
    [color=rgba(0, 0, 0, 0.749019607843137)]78- z9 i- E7 m, b
    [color=rgba(0, 0, 0, 0.749019607843137)]795 b2 `5 p4 O% {9 m$ i; o
    [color=rgba(0, 0, 0, 0.749019607843137)]80
    : r( H7 i" W2 e8 l[color=rgba(0, 0, 0, 0.749019607843137)]81
    $ F; F4 J$ y' h[color=rgba(0, 0, 0, 0.749019607843137)]82, U4 R3 @; }, Q- @, H! U3 o
    [color=rgba(0, 0, 0, 0.749019607843137)]83; n% u$ E# q% q4 X: ^" z) H
    [color=rgba(0, 0, 0, 0.749019607843137)]840 A, p' y. r  R/ a/ F
    [color=rgba(0, 0, 0, 0.749019607843137)]85
    1 w4 e( X6 t; B* A" O3 h9 {[color=rgba(0, 0, 0, 0.749019607843137)]86+ i( ]* K6 L- \. H
    [color=rgba(0, 0, 0, 0.749019607843137)]87" F. I9 G* i0 Y8 w+ Z4 J- F
    [color=rgba(0, 0, 0, 0.749019607843137)]88* Q+ z. O) t+ @" W( X. S4 P! v. K
    [color=rgba(0, 0, 0, 0.749019607843137)]89
    $ w6 W& L1 n& M( u+ x4 @  S: d[color=rgba(0, 0, 0, 0.749019607843137)]90( ^: C$ Q1 J4 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]917 _% C  m# [3 S& a% ~
    [color=rgba(0, 0, 0, 0.749019607843137)]92
    % H, D- V& C' X  W! [& |[color=rgba(0, 0, 0, 0.749019607843137)]93
    ' p2 \# B: b2 {0 u7 I[color=rgba(0, 0, 0, 0.749019607843137)]94
    9 z0 V& J3 s& r9 x  T9 V9 R[color=rgba(0, 0, 0, 0.749019607843137)]95
    4 r6 @! f3 r2 Z- K7 ?- W[color=rgba(0, 0, 0, 0.749019607843137)]964 q' f) q3 {+ u9 A! p8 v
    [color=rgba(0, 0, 0, 0.749019607843137)]97
      Z6 p1 j# W2 A[color=rgba(0, 0, 0, 0.749019607843137)]98# i3 i" v5 u  x8 C( c
    [color=rgba(0, 0, 0, 0.749019607843137)]99" E* T' w$ ^. Z9 Z& U' T
    [color=rgba(0, 0, 0, 0.749019607843137)]100
      u  M( S( c# V9 }[color=rgba(0, 0, 0, 0.749019607843137)]101* R" s! r6 F- I! H9 M! F2 N% \
    [color=rgba(0, 0, 0, 0.749019607843137)]102" p/ D" F" ~; D* B) |* I
    [color=rgba(0, 0, 0, 0.749019607843137)]1037 \# l' w) D; x6 l1 O
    [color=rgba(0, 0, 0, 0.749019607843137)]104
    & `5 j1 @' a8 B9 W+ \, V[color=rgba(0, 0, 0, 0.749019607843137)]105
    8 b  i* i3 n% l0 \# W[color=rgba(0, 0, 0, 0.749019607843137)]106
    7 c5 C. S/ F* G3 R4 t  ]* F. @/ L+ [5 s) {! w[color=rgba(0, 0, 0, 0.749019607843137)]107
    0 r" i- l" G( }- ~3 f- I4 T[color=rgba(0, 0, 0, 0.749019607843137)]108
    1 g! ~. o* h0 D[color=rgba(0, 0, 0, 0.749019607843137)]109- `- h2 h! t, a6 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]110/ y0 Y2 {; k3 L
    [color=rgba(0, 0, 0, 0.749019607843137)]1117 E3 c  U5 E# d6 C' C- {. D. e
    [color=rgba(0, 0, 0, 0.749019607843137)]测试结果:# u# L  I# W. B$ L* K) p) p+ A
    [color=rgba(0, 0, 0, 0.749019607843137)]
    . k5 C  g2 e( X; P
    ) ^  f% s" s$ u$ T9 w5 U- C
    [color=rgba(0, 0, 0, 0.749019607843137)]9 H: B; j3 K" h+ L. R. _! O
    1 l" F9 E  ]" [/ c  K
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小, ^/ G( W' f  ]0 Q0 V3 k
    [color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)
    2 V) z+ Z0 R7 B[color=rgba(0, 0, 0, 0.749019607843137)]1 ]: H' O& G$ @% G! i" n

    ' z# k7 A+ _& G; g[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小; b0 d* f7 O  ]( a: z
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量
    2 o& ]5 t3 J$ Q3 K. L) u- H+ _[color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;
    3 \. }  l1 Y  p7 |: _[color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)
    : B4 P' [$ D2 A[color=rgba(0, 0, 0, 0.749019607843137)]//{
    ; U; |, p$ y2 D  i) c+ h[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)
    0 W2 {% ]7 o+ d0 G7 ~[color=rgba(0, 0, 0, 0.749019607843137)]//        {
    4 Z8 L6 X0 c  R: A[color=rgba(0, 0, 0, 0.749019607843137)]//                return;
    $ M# ^9 J+ f6 f+ e+ f% X[color=rgba(0, 0, 0, 0.749019607843137)]//        }
    + ?5 ^& C* c0 V* H: G# X) g2 T[color=rgba(0, 0, 0, 0.749019607843137)]//        count++;4 o) A8 s# K: N; J  [" i# P$ ?
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);
    . z- A% p9 T+ P5 i' Y. u[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);, ?' U! F/ I8 e! Y* P
    [color=rgba(0, 0, 0, 0.749019607843137)]//
    6 k  m  @6 o$ {. D, h8 s6 W/ U; h[color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量- s/ Q1 ?8 M0 Q/ j" O8 J
    [color=rgba(0, 0, 0, 0.749019607843137)]//}
    * l2 A7 n2 C7 Q* a[color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之# I3 v! y  ^! \. ?. t( ^  K
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)/ _; H9 N! {- s6 o1 Q) ]
    [color=rgba(0, 0, 0, 0.749019607843137)]{% K+ L$ i1 r- x! l( r9 V% ^- d* r- _
    [color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;; E+ Z# H- r8 w' x) r( b" X
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    % w( F: [& O" L! R# ^' r* _2 w[color=rgba(0, 0, 0, 0.749019607843137)]1
    7 D/ B. S% f/ _+ K4 z* P[color=rgba(0, 0, 0, 0.749019607843137)]2+ p. P: p- }8 v- d4 F
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    ( k) g8 \+ g1 O. r) H8 x[color=rgba(0, 0, 0, 0.749019607843137)]4
    - Y9 Z7 c& q4 \/ o  d[color=rgba(0, 0, 0, 0.749019607843137)]5( `+ J& o& y1 O
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    ) X* ^6 Y% k3 f! g& E9 M" u2 g[color=rgba(0, 0, 0, 0.749019607843137)]7
    , p# j0 A2 g" O0 D! D7 m0 J8 M; J[color=rgba(0, 0, 0, 0.749019607843137)]8" }+ S" M1 v& T2 `! ]1 f
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    & B: _$ r1 _1 X; C, U7 Z# }[color=rgba(0, 0, 0, 0.749019607843137)]10' r$ o0 |5 c8 a/ f3 x
    [color=rgba(0, 0, 0, 0.749019607843137)]111 q" q  U- t( W0 C, ?
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    " R/ m# P' z, f! s0 B7 i[color=rgba(0, 0, 0, 0.749019607843137)]132 B8 Z( V+ P' @; S
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    2 W  [* G3 L/ r+ P5 i9 B7 f9 h5 I[color=rgba(0, 0, 0, 0.749019607843137)]15
    1 ~; h: N6 }% l) v+ P, s[color=rgba(0, 0, 0, 0.749019607843137)]16) ]% N5 @4 @% ?/ p" Y$ M
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    # c; \( p9 H1 I6 Q5 R9 d! a" F[color=rgba(0, 0, 0, 0.749019607843137)]187 y7 B, |" j3 J
    [color=rgba(0, 0, 0, 0.749019607843137)]19' J+ C/ _0 E/ G& w, G
    [color=rgba(0, 0, 0, 0.749019607843137)]20
    " k# C, j; s% Y% W+ V4 }. D[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    1 X) n$ M& V# a" x; t9 N[color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数  d+ c1 r* l$ k1 v0 }$ }
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)
    7 J4 I6 j# ]. k) f" D[color=rgba(0, 0, 0, 0.749019607843137)]{. Y+ z6 U1 t# U4 T; q
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点( W/ B6 K0 U9 j0 v& V1 l
    [color=rgba(0, 0, 0, 0.749019607843137)]        {7 s" ^; [5 D1 u1 r; F
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    & @, y% a3 ^: |/ D$ i( _$ b[color=rgba(0, 0, 0, 0.749019607843137)]        }4 q- g- n% b- X4 B* `
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空' B7 L* l) w- c0 t, L2 k0 `
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)$ C) O; F: _+ E2 Z; y4 ~, P2 @
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    + d- J7 v5 a+ f5 I+ m9 V[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    + K3 B7 i6 {5 D& z[color=rgba(0, 0, 0, 0.749019607843137)]        }
    ' y; t+ ~1 f& G[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);; O6 E! J( S) r8 F1 ~0 j
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    4 B3 L* }; x" e0 I[color=rgba(0, 0, 0, 0.749019607843137)]1
    & y, ?6 }9 ]- F% R; ?[color=rgba(0, 0, 0, 0.749019607843137)]2
    0 Y# j5 }3 |( I+ T, J2 p7 K6 r. a[color=rgba(0, 0, 0, 0.749019607843137)]36 U2 k  L3 p0 |( L8 k3 N! \6 c/ g
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    : G) t; i6 X) Q) v  [[color=rgba(0, 0, 0, 0.749019607843137)]5- V, |( q3 G5 G0 l! I6 m
    [color=rgba(0, 0, 0, 0.749019607843137)]6( K6 |! L. d" Y4 J- ?! U. Z% G8 F
    [color=rgba(0, 0, 0, 0.749019607843137)]7. Z. }; d! q6 X' t$ p8 h
    [color=rgba(0, 0, 0, 0.749019607843137)]80 t7 k/ _; }* B
    [color=rgba(0, 0, 0, 0.749019607843137)]9; I' G8 O1 }' [8 E
    [color=rgba(0, 0, 0, 0.749019607843137)]10& f9 z  c3 _/ X* A& e; Q
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    % J- h7 D" J+ ?+ P[color=rgba(0, 0, 0, 0.749019607843137)]12
    + q" Y  M& D+ g' t! F[color=rgba(0, 0, 0, 0.749019607843137)]13# L. E7 h/ u- ]8 O) _- l
    [color=rgba(0, 0, 0, 0.749019607843137)]140 k/ @, G' l  y* o/ r0 r- K
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    * @: O. [  w% W  d! H2 z9 H[color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)
    6 ]% J9 [' L# F; F[color=rgba(0, 0, 0, 0.749019607843137)]{
    9 k* `5 L% [5 F2 G[color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0  u3 R* ?" |4 j- V0 X0 O7 H" i
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)' {2 V' b" j- P1 o$ I
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
      K& X1 w! I# ]% `9 Y$ \0 ~, W[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;9 N, ?  A  h; w) w5 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        }% N( ~* q: N, R& k, u/ q: D' @5 K/ _
    [color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树6 D+ v6 W3 L" E0 [+ ^" n; [* J
    [color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度7 E# T+ G, P+ v
    [color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度* _8 p0 ]; x0 V9 y' I# {0 E+ h( T0 b
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 z% |* @0 `' ]( d9 F: U% ?- m  O

    3 {) G( D% Q0 V9 a[color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;/ t8 w+ Y5 H- `: P7 ]. [; P. R7 B
    [color=rgba(0, 0, 0, 0.749019607843137)]}2 i' b4 L. F  Z* t9 g* F
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    6 z, H2 |8 E" b/ Y" r( D; D$ ?[color=rgba(0, 0, 0, 0.749019607843137)]2
    ! K0 a7 J3 I: r/ d[color=rgba(0, 0, 0, 0.749019607843137)]3
    $ Q. _9 c4 w9 V4 w* U[color=rgba(0, 0, 0, 0.749019607843137)]4
    " a. [1 c) x8 a/ Q  j[color=rgba(0, 0, 0, 0.749019607843137)]5
    + e- }& V" w; A% y% T) ~/ W) Z' P[color=rgba(0, 0, 0, 0.749019607843137)]6
    " v* ~/ E& u' g7 E+ i( R2 ?[color=rgba(0, 0, 0, 0.749019607843137)]7; }! s! h$ h1 z9 B+ j* a) A: \4 i# K. v
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    , ]$ p. E+ y' h# g  \+ B3 I0 d[color=rgba(0, 0, 0, 0.749019607843137)]90 p: B% [2 h% b- v: C  E. P. _$ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]10' B& T1 i- ~( X7 c9 K
    [color=rgba(0, 0, 0, 0.749019607843137)]119 d# `, \# s1 Q1 C4 j5 H! |  ?
    [color=rgba(0, 0, 0, 0.749019607843137)]12/ ^9 V6 T0 i2 P' K' E+ _
    [color=rgba(0, 0, 0, 0.749019607843137)]13# m" w! _& p' N: m
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数6 @) I' q3 Z' z$ ?2 q7 L) d
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 |" K" W5 z/ G- ^# D3 o
    4 w6 P  q( Q' c' g$ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]' ]& a# S  ?5 x1 d5 K# T
    9 j; d) Y, y1 K: h3 n! N
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。; f! V: a4 o9 z' Z4 A3 w/ C1 |
    [color=rgba(0, 0, 0, 0.749019607843137)]1 I& x# p- _  _6 ]! f5 E

      b5 M" Q$ V# K' x- Y. m[color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数
    5 G& V) s% @2 o$ M: n5 s0 G2 M[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)1 N1 f5 D0 ]. x4 X& u
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    8 T9 g8 W+ F7 o- Q1 f[color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);
    . D' ^6 W. b( B! w4 }[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)' t* Y3 _$ i6 _% L1 o1 U
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    8 U2 v  t0 P) f4 J0 C- K[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;0 Z- @- R; H7 A4 H. v
    [color=rgba(0, 0, 0, 0.749019607843137)]        }& ]; R, _- P! Z; k7 ?" i3 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)  e6 `3 Z5 n! N; ?3 P
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)
    5 X$ ?9 ?! Z7 O  N# j3 e2 Y[color=rgba(0, 0, 0, 0.749019607843137)]        {
    1 [" x% R  ^3 a[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;0 K. |8 c: n( Y: y, p
    [color=rgba(0, 0, 0, 0.749019607843137)]        }$ f! P* [- ~- u7 E0 C9 |- r2 j4 E# B
    [color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层
    9 c  M, m! ?" X# P# n[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);0 N6 l# w$ v  e' U
    [color=rgba(0, 0, 0, 0.749019607843137)]}1 u' i+ b, |# W+ {
    [color=rgba(0, 0, 0, 0.749019607843137)]1! L$ S% l) d- Z' }) M: U
    [color=rgba(0, 0, 0, 0.749019607843137)]2- r; c) ^' J6 f6 a8 i! ]0 ^, ~" x
    [color=rgba(0, 0, 0, 0.749019607843137)]3! x2 s6 ^) d$ R) ~7 v5 U: w, Z# F
    [color=rgba(0, 0, 0, 0.749019607843137)]4  T! e+ E  k5 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]5/ B( q0 E2 T) M9 t. H" E
    [color=rgba(0, 0, 0, 0.749019607843137)]66 ?/ |$ K, I  |+ M. u
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    9 G* P" A- u& W% m8 H7 f9 z4 |[color=rgba(0, 0, 0, 0.749019607843137)]8
    1 k) q2 ?) X, Y: _[color=rgba(0, 0, 0, 0.749019607843137)]9
    " ]- _- T3 ~! w0 l[color=rgba(0, 0, 0, 0.749019607843137)]10% ~8 v$ X3 E( s5 i1 d. C) Y, b) I' X
    [color=rgba(0, 0, 0, 0.749019607843137)]11+ M- l7 u8 y/ V+ V' l2 f1 U
    [color=rgba(0, 0, 0, 0.749019607843137)]12- Y. w$ P+ @7 r% t% ?1 S# P8 t
    [color=rgba(0, 0, 0, 0.749019607843137)]13& e9 V( q) d# ~6 l$ j0 i* d3 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    . z# v. @) d* j5 k; A9 O) }) W$ `% H[color=rgba(0, 0, 0, 0.749019607843137)]15" u7 U0 j' d  l/ x* g% @" H3 X/ c
    [color=rgba(0, 0, 0, 0.749019607843137)]160 {! A- C! k2 Y7 ]" w& W* u, F
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找8 [) b% h  c4 h- b) @0 j
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    & M# A- x. k* L" \& C& x0 w[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data): G! W0 k3 G" ^8 x8 P
    [color=rgba(0, 0, 0, 0.749019607843137)]{* t3 |. T  d( Y7 h# l
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    1 J- D# Y" Y( s3 V3 K9 v) g[color=rgba(0, 0, 0, 0.749019607843137)]        {
    ! i# {% g* b5 {; I[color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;
    . T9 }5 `; z2 o) G[color=rgba(0, 0, 0, 0.749019607843137)]        }
    $ w- z; i6 a  z+ }$ I' ]3 \: k[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data), S- X6 g, j. ^2 y( z3 }+ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    * S2 a& K, j+ C- Q/ @[color=rgba(0, 0, 0, 0.749019607843137)]                return root;4 s* r( u* H: g7 c$ g# ^
    [color=rgba(0, 0, 0, 0.749019607843137)]        }9 r, B$ U9 |8 r. _+ W, A6 h0 H
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树
    6 r4 z  |7 }* }/ j4 }1 R[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);
    8 A1 {, S0 U& B8 n8 U[color=rgba(0, 0, 0, 0.749019607843137)]        if (lret), T& L; w+ I( Y! d
    [color=rgba(0, 0, 0, 0.749019607843137)]                return lret;
    6 ^! [* o0 T3 `7 N' q[color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树
    7 e5 a! {5 \0 v/ g. s7 T[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);% k5 f) y, T" i; W6 N0 V/ b
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)  k, I1 J& a3 S! Y0 w" i1 p( j5 w
    [color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    : G. ]% ~0 _5 O' g[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;
    " q* h$ t! V# q5 C# `+ _3 u/ _[color=rgba(0, 0, 0, 0.749019607843137)]}
    ! N$ b" A8 n( D/ D4 o1 n[color=rgba(0, 0, 0, 0.749019607843137)]————————————————8 ^( S' Y, I/ r* |
    [color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; S. Y& R+ ^2 Q  ]6 S  A
    [color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/1268412120 E5 A$ ^! m5 C- h) q# n" V7 V
    ; c) T2 q3 S! n+ N

      r" [$ X$ u& Q- N% x/ D% A" c[color=rgba(0, 0, 0, 0.75)]  R. @# t4 l, e

    7 {4 _" J4 b. g, S, p$ d, T* N) r6 U. k/ a1 g# J

    " t  A' v# t% |$ o9 F# C* l
    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-5-26 06:40 , Processed in 0.503977 second(s), 51 queries .

    回顶部