QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2514|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历
    0 h) X  h4 _9 U
    7 s7 Y; @2 \) i+ v, E: X[color=rgba(0, 0, 0, 0.749019607843137)]文章目录
    ) |( s, n- d3 p2 n; O  y[color=rgba(0, 0, 0, 0.749019607843137)]前言
    0 @% O  S! o( Q4 i: y* {# O[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式0 O9 n$ T# b2 ]' |% S6 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    ) G( I, H; B6 Y- M; Z8 T[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历, P% x: v! \5 ^0 G
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    3 H9 n8 o# g2 X8 B% B[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    ( O% |  Q  V- G: u( l[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    6 W0 z- Q/ V1 A  j[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    + W4 g: c& t  h& a# o* `5 ?[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找$ o% }8 }5 z5 S3 A. K5 U5 E
    [color=rgba(0, 0, 0, 0.749019607843137)]前言/ G) j# O; y3 X5 T' c
    [color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。! U+ W+ ~/ A8 l) H
    [color=rgba(0, 0, 0, 0.749019607843137)]
    2 R- Z, ?9 @, t$ E  i5 X
    " {0 M0 Y% W6 l/ ~' G1 n
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    # o3 Z/ H6 A) y$ H5 B[color=rgba(0, 0, 0, 0.749019607843137)]
    6 K6 t: b; o" ^; a) U7 V' t

    ; Q3 w/ T7 D2 x: S0 j) i[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:
    " B. s1 F: G4 P6 Q7 V) X1 B) q* u[color=rgba(0, 0, 0, 0.749019607843137)]( A, {% X# @# W* @! P
    5 X) S' k7 M2 Q& d  v6 `( G
    [color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树
    6 T, S4 i+ K) p' }[color=rgba(0, 0, 0, 0.749019607843137)]& A6 n, e+ v- a8 m' T  s
    7 ?) M! n" |4 y" }( b3 y' J
    [color=rgba(0, 0, 0, 0.749019607843137)]
    % H( ?  ~6 [' q, R6 t
      w* ~! u) R1 R# s
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树0 i  V: V; p" T" C+ E$ y* N8 c
    [color=rgba(0, 0, 0, 0.749019607843137)]. J; m" y7 ^/ f
    3 t( T  q: e% {) r$ }. T
    [color=rgba(0, 0, 0, 0.749019607843137)]& Z6 Z# s; \/ _2 d8 [5 Y/ Z& w+ @
    : d4 \* f- q3 e
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根
    " o8 p# @. d  }5 ~[color=rgba(0, 0, 0, 0.749019607843137)]: n$ G" f; q7 g
    4 N/ r/ k$ x3 I1 K
    [color=rgba(0, 0, 0, 0.749019607843137)]
    $ ^. _9 g7 T7 K) k
    6 r: r, B+ U0 e* G" F
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    , U4 [# Q: j9 L/ L[color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之; G; `! B' {9 M9 u, M
    [color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;
    ' r5 ], O, _) Q% i7 C4 s/ o[color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;
    8 N, G2 I' u+ t0 G0 S[color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);
    ! Q/ q$ m, f2 V, o8 |/ o[color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);
    2 k# z+ z, L8 O# M3 O[color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);+ M* w# o4 R9 {, O& a, l1 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);6 ^7 l) f. |/ J8 ?, u% a; A
    [color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。- l+ b5 H) {4 E) ^+ F0 E2 t
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & i) d( L3 ?$ O2 K1 Y6 S
    ' D1 Y4 H# n$ h; U
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历" B7 R/ I' g, O; z* P4 y: W
    [color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    ' F3 g8 a  b1 v1 Q% f" W[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>9 O3 f$ a# E5 I" x7 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>
    & j+ o+ C) G; j' n. K0 Z+ X[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>$ y& C+ m/ b+ {
    [color=rgba(0, 0, 0, 0.749019607843137)]" ]* N% h. Y, ?; r  a

    0 V, V, r6 u% k3 }[color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;
    $ y# b; E7 A; K3 g9 T1 T0 q$ x[color=rgba(0, 0, 0, 0.749019607843137)]
    2 W! \+ U  x$ B" j3 m$ e

    2 v( O. K9 l3 ^) [4 ]$ J[color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体/ e; D& q% u: C& J, Z! y: ^$ C
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    + h" u+ P7 A, n2 \1 Y2 T. t[color=rgba(0, 0, 0, 0.749019607843137)]{
    . \- z; t) M2 t1 [[color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;
    & S) O2 t$ }7 E2 d- Z2 [! y[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;. U" e$ W) G/ q$ P' ?% v
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;
    % b. l$ z2 P# L[color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;& E7 j  n& T% A6 W% |9 F' Z2 P5 b
    [color=rgba(0, 0, 0, 0.749019607843137)]$ d% p" z. g9 e
    3 Z$ w8 X1 d7 n: V
    [color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历1 g, Q+ S% @5 g! J  R9 s: S& S$ z
    [color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    * q- s! P8 Y1 S  R- d/ J[color=rgba(0, 0, 0, 0.749019607843137)]{
    " g5 `, l5 X: L1 b$ _[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    2 U+ i  C+ F* U! J[color=rgba(0, 0, 0, 0.749019607843137)]        {
    0 @" [# N+ B+ B  ~. J& ^[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");" J( o  t# Z* {3 {! I% G; F( m
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;) ^# M* ~2 K, A3 X0 t
    [color=rgba(0, 0, 0, 0.749019607843137)]        }3 ^* `' L* [" ^3 |7 Y$ h3 u
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);- b/ e; L7 M/ _0 o; {* l
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);7 {) f" c1 J$ K1 t' N- [% \
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);
    $ L- N( I! F  \7 X[color=rgba(0, 0, 0, 0.749019607843137)]}
    ; G. F$ _% u. D: g( `[color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历
    . \1 _3 Z3 F3 ]8 w% G[color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)1 b1 y, g& A: z" w  t8 g. W7 f
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    ; C4 j/ t& N/ Y: A" k' ], _[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL); ]! V# k) v! h3 X$ k9 s
    [color=rgba(0, 0, 0, 0.749019607843137)]        {1 m: x8 @4 ?; |
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");) P9 s, P4 ^' Z% J9 y9 w
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    ! N( m* d; [( Z& Z- h/ |- g" X) O[color=rgba(0, 0, 0, 0.749019607843137)]        }) U% M1 J3 T( P  Q1 @0 c
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);
    8 u' m. X* G& q& _" m5 J[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);) s: `# d' e1 r! |+ M( P
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);
    ! }, ^# u( c8 r8 x+ X' r; J( a# W[color=rgba(0, 0, 0, 0.749019607843137)]}+ T+ }8 R) {0 s8 J3 o& }5 |
    [color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历
    & T- o3 @1 i* ^# y- i7 J* p- _3 }[color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)
    & [+ m4 o4 b! u[color=rgba(0, 0, 0, 0.749019607843137)]{1 b; ^1 @7 k8 ?' O9 Q- _8 O
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)& w% O# E" M" s, }. l5 R1 y
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    / k7 q' w! }9 y; X% q[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    : Q3 k! V# s+ ~; ]0 m* `[color=rgba(0, 0, 0, 0.749019607843137)]                return;8 O- A5 Q" D3 B. k; m+ O$ J1 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        }+ Y: K0 m! h/ k/ m7 T- ~4 M6 Z0 f
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);! T# k* F: e$ b2 `  P
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    3 e2 h! w5 g0 J2 y$ o% q[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);0 n% l+ ~4 y; C$ F8 w
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    : p( n7 N! H* L+ Q6 t+ x6 `: `7 p, d# x[color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    8 N# d* s; J/ O[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()
    6 D" a8 K- Y8 l* t% k3 I[color=rgba(0, 0, 0, 0.749019607843137)]{
    , H4 E0 d9 c; ?; {9 z[color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间0 S5 O2 r# q6 K' [
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));0 ^2 X& |2 V; `$ ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);
    " D# r6 {6 G2 B- s& c1 z% F[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));; N4 d4 s' Y9 T) v  r6 _6 u" J
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);
    $ U9 Q9 L  y) y- \8 K) F8 `[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));1 }' d* r$ z7 X& F! T# D  t
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);& f# h- V5 X( G6 p0 V- x+ ~9 @
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));! e* A* X9 w4 z* t+ \; H
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);
    * M( N- l; b5 H8 ]. C[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));
    + j8 x5 Q$ H: T  a[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);
    & c  o, N  ?; Y0 d8 n[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));$ M' }( V% P& z# d; P
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);  o$ V% d! @# K+ y1 {5 J$ K, g3 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]: m; V" U* F; H# q/ u7 ]6 K4 B

    ' t) s; s1 `0 Q- l. O[color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;" ^: {/ O9 ?$ D* G$ w" i' [, b
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;
    # n8 t" Q1 f: Y; N[color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;
    : e( V/ C" h1 c+ V: \# ?6 n$ E[color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;, D' g" Z# d; t. S) q% o
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;
    : a+ N: g3 ~. P# o- U# ^* j5 W[color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;" I+ N4 b6 Y% y
    [color=rgba(0, 0, 0, 0.749019607843137)]
    5 a  `% K- ?- \$ C( e

    * H, E, g) g" T; F, N/ X3 n/ N+ {[color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;
    9 y3 `/ u+ \- B$ a5 c+ R[color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;3 m' z- N: N/ a! z# A( z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;7 x6 \, L: P; e& L7 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;4 g" c6 H, M; P% i9 |/ c  j
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    * e; S* X9 v. A5 l0 c[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;  B$ M# x- G# L
    [color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;
    - U( ?" m, q9 @4 f% B" c[color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;8 P0 j; z: l& f" |' F
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;- g) }3 S% \$ }- v' j1 t8 T( @3 ~/ X
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;4 Z2 E  J: O* g$ h
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;
    3 C; o+ }" S2 V7 B" T$ j2 [[color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;* [$ E5 U  S" g& Z: X; j- I4 u
    [color=rgba(0, 0, 0, 0.749019607843137)]
    / J2 H0 S: V1 p' i+ r& y; q

    , @4 J" @5 L7 N0 d. g+ q5 C[color=rgba(0, 0, 0, 0.749019607843137)]        return n1;
    8 n9 ]; I- G4 t; M* o6 m$ e[color=rgba(0, 0, 0, 0.749019607843137)]}# `' S" b4 ?. w
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ( s- `. b- f' v1 M% {1 ^" H/ b

    " k6 N1 F( r7 j2 ~$ w6 H# c( j8 N[color=rgba(0, 0, 0, 0.749019607843137)]int main()
    2 J  l0 J# n  M2 d( `7 Z[color=rgba(0, 0, 0, 0.749019607843137)]{
    # O$ X6 d/ x9 }5 D* X$ b[color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
    ' f6 m0 a5 @7 {/ L[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();( j" n: D$ `6 E1 h
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ! `7 U; H/ M( A& @( V5 Z2 ^8 x) f

    8 l2 A) a" a) ?/ ^$ t[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    + Z% v4 a: l. X: a8 o  Q6 _[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");
    - ~% c! h  G8 B9 B  F+ G5 p* y- |( u[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);; @2 i9 ~9 x# g' y# h9 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");; g0 C$ ]. u6 T% L" ?- `# D1 K6 c
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历  C- f4 F2 A) D7 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");
    + F# a5 F: r3 b7 G7 ^. z7 h[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    ' t8 Z9 U% P5 Z4 i% P0 v[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    + Z. C7 J& Z5 D! Q6 _[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历
      X8 c+ @5 Y3 v1 R8 l+ R% E[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");
    2 ]+ l) u7 `' s[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    % \* \3 R* W0 ?9 s) v[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    7 E2 t9 l  h# u* s5 p[color=rgba(0, 0, 0, 0.749019607843137)]) @7 |! A  j( ~" z

    0 V0 k/ c; x! b+ k. g: f9 Y* m[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;% L& s6 b0 H1 M6 H# J% [
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    ) \4 C4 }$ d  g# K/ u[color=rgba(0, 0, 0, 0.749019607843137)]1
    $ F& K/ o. k9 H0 z2 m; s7 K: D" C6 \[color=rgba(0, 0, 0, 0.749019607843137)]26 S# E% z# U# o6 k% A' u
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    # F4 m4 e6 k4 A/ a/ |: n1 n[color=rgba(0, 0, 0, 0.749019607843137)]4
    9 O. A: y  ^: u) h( Z9 @+ K' }[color=rgba(0, 0, 0, 0.749019607843137)]5/ E  n" b2 U1 x* f& f* z8 C: G% {8 f
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    0 }. V; I% A+ s3 X[color=rgba(0, 0, 0, 0.749019607843137)]74 f) e1 C6 y  {9 G8 P) o
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ; y4 G1 m$ }5 P/ P4 [+ S" b[color=rgba(0, 0, 0, 0.749019607843137)]96 c+ C5 `* w( u( [+ g) ~/ i, S
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    ) M! [  W+ ]) `4 a1 C[color=rgba(0, 0, 0, 0.749019607843137)]11
    4 y* j1 c  [) I4 Z" @5 `[color=rgba(0, 0, 0, 0.749019607843137)]12
    - G9 w4 j) P9 J4 |3 M[color=rgba(0, 0, 0, 0.749019607843137)]13* P% _' P; w0 e0 r
    [color=rgba(0, 0, 0, 0.749019607843137)]14; Q1 @8 \4 J8 H3 G: O4 F- L
    [color=rgba(0, 0, 0, 0.749019607843137)]15
    3 e8 G& |/ J' T3 q; y[color=rgba(0, 0, 0, 0.749019607843137)]16
    $ B% R& A$ ]$ |: {1 ~[color=rgba(0, 0, 0, 0.749019607843137)]17$ _( P0 l1 n' ^9 ^$ E
    [color=rgba(0, 0, 0, 0.749019607843137)]18
    6 i. o& [$ B$ T$ @[color=rgba(0, 0, 0, 0.749019607843137)]193 i0 S6 D9 I7 r) x* o
    [color=rgba(0, 0, 0, 0.749019607843137)]20* o: B# w& L5 m! {) \2 J
    [color=rgba(0, 0, 0, 0.749019607843137)]21
    , ~" W9 w" i' B, p[color=rgba(0, 0, 0, 0.749019607843137)]22
    0 T8 @5 ^$ R+ E8 O+ k5 q' i, @[color=rgba(0, 0, 0, 0.749019607843137)]23
    $ F' J7 G- ]" }6 w+ p[color=rgba(0, 0, 0, 0.749019607843137)]24
    ! V' F5 q! b: @& f- m) n[color=rgba(0, 0, 0, 0.749019607843137)]25# h7 ^: ?; b& `# U* Q$ r
    [color=rgba(0, 0, 0, 0.749019607843137)]268 \- y4 e0 n! ?& g' {
    [color=rgba(0, 0, 0, 0.749019607843137)]27
    % S& ^0 v1 v! X( o6 B[color=rgba(0, 0, 0, 0.749019607843137)]28
    # ~" d0 G3 E* x! v0 w1 e1 F[color=rgba(0, 0, 0, 0.749019607843137)]29
    / b: J2 W! B5 B4 }( K$ i[color=rgba(0, 0, 0, 0.749019607843137)]308 C# F# K- l2 B
    [color=rgba(0, 0, 0, 0.749019607843137)]31
    ! {5 C8 X8 M1 U9 Y5 h& d8 ^[color=rgba(0, 0, 0, 0.749019607843137)]32
    & _: ?8 Z, H& q: \[color=rgba(0, 0, 0, 0.749019607843137)]33' C; }! X5 r4 g. ^* h9 S
    [color=rgba(0, 0, 0, 0.749019607843137)]34
    6 u" e1 p' a: ?, s* c3 P% t& Q[color=rgba(0, 0, 0, 0.749019607843137)]35
    7 m, Z0 H- n7 `6 c; t4 X# b[color=rgba(0, 0, 0, 0.749019607843137)]36
    : I2 _4 w) ^& k8 k( v[color=rgba(0, 0, 0, 0.749019607843137)]37
    : r$ f  b7 G3 O[color=rgba(0, 0, 0, 0.749019607843137)]38
    : I# ]- I. U- R6 V8 F[color=rgba(0, 0, 0, 0.749019607843137)]39
    ; @" d4 b; ~/ j* E& v[color=rgba(0, 0, 0, 0.749019607843137)]40" T' a, P2 T+ A- |
    [color=rgba(0, 0, 0, 0.749019607843137)]411 P+ n6 v5 h" B# @7 C; J1 L3 g
    [color=rgba(0, 0, 0, 0.749019607843137)]42$ M, v- t+ I( q
    [color=rgba(0, 0, 0, 0.749019607843137)]43
    & H" \7 N& J& v# y[color=rgba(0, 0, 0, 0.749019607843137)]44
    $ ]; h* r& F: w- I) w1 S[color=rgba(0, 0, 0, 0.749019607843137)]45( x, M2 V5 `$ U1 u( w/ M
    [color=rgba(0, 0, 0, 0.749019607843137)]46
    ! D7 s) n4 O) ~[color=rgba(0, 0, 0, 0.749019607843137)]47/ @6 {5 p; `9 P; F# V8 D
    [color=rgba(0, 0, 0, 0.749019607843137)]483 E; z! Y1 i6 X/ O# @
    [color=rgba(0, 0, 0, 0.749019607843137)]49; w" p: \0 ?' @& X, O
    [color=rgba(0, 0, 0, 0.749019607843137)]50
    ) d9 f0 P7 J) b: m% U7 b[color=rgba(0, 0, 0, 0.749019607843137)]51
    ! G* B. n7 l3 ]5 S  ]& R[color=rgba(0, 0, 0, 0.749019607843137)]520 u& T8 W  H+ P7 W0 r8 N$ T- C0 D, z
    [color=rgba(0, 0, 0, 0.749019607843137)]534 n4 w+ V% H" A5 X/ Q7 T& I
    [color=rgba(0, 0, 0, 0.749019607843137)]54
    ( z* O( R" w0 ]+ T. e5 y[color=rgba(0, 0, 0, 0.749019607843137)]55/ P1 L4 F6 ?1 p! h
    [color=rgba(0, 0, 0, 0.749019607843137)]56/ C. W3 i/ |. z1 t1 L
    [color=rgba(0, 0, 0, 0.749019607843137)]579 D; k( J: e/ p0 H. Y* Z
    [color=rgba(0, 0, 0, 0.749019607843137)]58! ]) H; f' z' J4 d7 `
    [color=rgba(0, 0, 0, 0.749019607843137)]59
    ! e0 G/ p; t* D+ W7 ~* t[color=rgba(0, 0, 0, 0.749019607843137)]60
    - g5 W; r. K* V+ b7 Z[color=rgba(0, 0, 0, 0.749019607843137)]61
    / u* u  Q" c  l+ G  K* X[color=rgba(0, 0, 0, 0.749019607843137)]62
    - n; }+ ~3 y' n' A; p[color=rgba(0, 0, 0, 0.749019607843137)]63
    0 |+ W! W/ T4 L$ y6 w[color=rgba(0, 0, 0, 0.749019607843137)]64
    5 m& v' q! @; i# c[color=rgba(0, 0, 0, 0.749019607843137)]65$ a3 A$ ]2 t( c1 j2 H) l) c
    [color=rgba(0, 0, 0, 0.749019607843137)]666 B$ J* o) V7 \
    [color=rgba(0, 0, 0, 0.749019607843137)]67) y" [0 K# r' L. L0 [
    [color=rgba(0, 0, 0, 0.749019607843137)]686 X, c1 N$ Q; \  z- F
    [color=rgba(0, 0, 0, 0.749019607843137)]69- ~6 R1 ~" t' q" J; v
    [color=rgba(0, 0, 0, 0.749019607843137)]70. K, X) f0 b3 `: J
    [color=rgba(0, 0, 0, 0.749019607843137)]71
    $ |% d- o* R4 d7 G; Q, _& j" ~, n[color=rgba(0, 0, 0, 0.749019607843137)]72* @' B: {! |( `& ?
    [color=rgba(0, 0, 0, 0.749019607843137)]73
      O, `0 a% ~- K  x! T[color=rgba(0, 0, 0, 0.749019607843137)]74& S- x: U* M, I, s  \$ L
    [color=rgba(0, 0, 0, 0.749019607843137)]75
    ! `. }0 P% b9 u5 r+ q7 `2 R( b2 X, v[color=rgba(0, 0, 0, 0.749019607843137)]762 D4 z- ?7 h* G+ V7 y- `
    [color=rgba(0, 0, 0, 0.749019607843137)]77. K  m5 |: j: {: z& {
    [color=rgba(0, 0, 0, 0.749019607843137)]789 @. h* z  A! }9 m6 C) ?1 h$ ?
    [color=rgba(0, 0, 0, 0.749019607843137)]79
    ; \# J$ r% |+ ]! Q; a! a% z[color=rgba(0, 0, 0, 0.749019607843137)]80
    5 K" ~- o( q3 j7 r" d9 `[color=rgba(0, 0, 0, 0.749019607843137)]81+ y+ P/ `. o2 K- V7 D7 W5 a( G
    [color=rgba(0, 0, 0, 0.749019607843137)]82
    . |$ w8 L$ y2 g[color=rgba(0, 0, 0, 0.749019607843137)]83
    5 ?! k1 k, q# b2 m* y[color=rgba(0, 0, 0, 0.749019607843137)]84
    ; V7 T; l. T+ S: H[color=rgba(0, 0, 0, 0.749019607843137)]85) w8 c4 m% ~% b' \8 x, o9 `
    [color=rgba(0, 0, 0, 0.749019607843137)]866 O) P+ f4 C, o! z- |$ N
    [color=rgba(0, 0, 0, 0.749019607843137)]87; b/ T- E, b1 X5 S  z, {
    [color=rgba(0, 0, 0, 0.749019607843137)]88
    ( v' J# @" n8 o1 m" Y[color=rgba(0, 0, 0, 0.749019607843137)]892 A) Y3 ~* l; [& m# @
    [color=rgba(0, 0, 0, 0.749019607843137)]90" ]  U! {  ]2 z/ D7 g
    [color=rgba(0, 0, 0, 0.749019607843137)]91, A/ ^7 q6 N: V3 _
    [color=rgba(0, 0, 0, 0.749019607843137)]92
    ! M) ?* i' K: L( [$ @1 B[color=rgba(0, 0, 0, 0.749019607843137)]93( s0 N8 y- _& I  P
    [color=rgba(0, 0, 0, 0.749019607843137)]94/ @* k6 s2 G( e* z" b5 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]952 Z; q* B# h* r$ K( m
    [color=rgba(0, 0, 0, 0.749019607843137)]967 E; v& y' I+ C. y' n  o2 l
    [color=rgba(0, 0, 0, 0.749019607843137)]97
    $ w: A# C- z; }9 b0 z[color=rgba(0, 0, 0, 0.749019607843137)]988 j) |/ H  S1 m& O) o( L8 m
    [color=rgba(0, 0, 0, 0.749019607843137)]99
    . E7 y9 X7 o. q0 x[color=rgba(0, 0, 0, 0.749019607843137)]1006 z  o1 l1 z: L$ u- O( }% _9 w
    [color=rgba(0, 0, 0, 0.749019607843137)]101
    + }3 n8 d+ `0 Z# k4 h[color=rgba(0, 0, 0, 0.749019607843137)]102
    $ c2 X  ]% [1 ~% z& f# ^+ b' L[color=rgba(0, 0, 0, 0.749019607843137)]103
    8 M" F" K1 @! ~* ][color=rgba(0, 0, 0, 0.749019607843137)]104
    : ]& g* `1 o) ?3 f: f[color=rgba(0, 0, 0, 0.749019607843137)]105
    - s  b9 F# z8 s: {[color=rgba(0, 0, 0, 0.749019607843137)]106
    , @& }8 A4 K" b# e* p' {' G5 _[color=rgba(0, 0, 0, 0.749019607843137)]107  g2 o5 T) I8 ]  G3 m; ]$ A
    [color=rgba(0, 0, 0, 0.749019607843137)]108
    " P- `) \; I( B/ M[color=rgba(0, 0, 0, 0.749019607843137)]109
    ) A* `8 f$ Q( `  y[color=rgba(0, 0, 0, 0.749019607843137)]110& ~  P7 N7 b3 U/ \- G, Y9 N$ c
    [color=rgba(0, 0, 0, 0.749019607843137)]111$ \) g" `2 i+ @$ F! H5 y( a+ V, L
    [color=rgba(0, 0, 0, 0.749019607843137)]测试结果:
    / K7 K+ B6 j  {& }, a# `. B; H[color=rgba(0, 0, 0, 0.749019607843137)]
    . N# M, {- G! Q

    ) h- Y0 L3 l4 ~4 b8 I7 D/ e; I  |. B[color=rgba(0, 0, 0, 0.749019607843137)]
    ( {1 y9 F& }) _1 s' Y0 U

    3 I3 ^* Z& S; ^( K; `: c% J[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    $ ]4 _( ^( [# n& V9 R[color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)( h. ^  m4 j0 A2 a3 a$ l  D
    [color=rgba(0, 0, 0, 0.749019607843137)]
    9 }- J4 G- _9 j; w, p1 v( I
    * s3 j; v2 \. E" P) B0 k/ m! K
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小& A3 Y' X+ l5 g# b7 U( R" w! I# h; Q
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量; X- L% l6 H1 I: O6 I, b6 c
    [color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;
    1 Q( D0 X  X) M! k3 d" b. |4 m[color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)  o0 X; e) ]5 \/ E9 K* Q
    [color=rgba(0, 0, 0, 0.749019607843137)]//{* D7 }  V& Q  \6 k4 K/ v$ W
    [color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)/ b) s2 N$ u* N7 H; c; b- l0 R; i
    [color=rgba(0, 0, 0, 0.749019607843137)]//        {$ A; j3 A$ l+ G" I, t3 a
    [color=rgba(0, 0, 0, 0.749019607843137)]//                return;$ S! }. w+ d8 ^1 J& K$ a
    [color=rgba(0, 0, 0, 0.749019607843137)]//        }  g7 J. F# I$ \0 G- h& B) ^
    [color=rgba(0, 0, 0, 0.749019607843137)]//        count++;
    ' ~9 R* w5 _# G5 |5 Y[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);9 [: y2 C" ~0 r0 m0 k( O( D/ \0 b
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);
    7 ~$ ^8 W+ B) x[color=rgba(0, 0, 0, 0.749019607843137)]//  v6 p: K7 Y8 L; R! ^4 {% Y; ~3 _
    [color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量
    . i* f/ l) ]4 g7 u! \. [[color=rgba(0, 0, 0, 0.749019607843137)]//}: |# r& n' G% A! w9 F: q; }7 y
    [color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之: v3 D  p- ]* P: M
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)
    $ H" q, ~! L; m[color=rgba(0, 0, 0, 0.749019607843137)]{
    # r  w3 ~+ u0 ]; S[color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;$ Q$ \* s3 u/ y$ q7 i; K* T2 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    / S, p! X; s& V3 b! \1 `- b[color=rgba(0, 0, 0, 0.749019607843137)]18 X3 H6 ^( W% t+ |1 q
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    ; r) ?6 t# A1 Y" |. A% N% ~6 {* P1 t[color=rgba(0, 0, 0, 0.749019607843137)]3
    " {) u1 t4 E: t0 h) y+ H[color=rgba(0, 0, 0, 0.749019607843137)]45 s, T/ E  w% ]7 G
    [color=rgba(0, 0, 0, 0.749019607843137)]53 ?  I+ Q( b  @) U$ H
    [color=rgba(0, 0, 0, 0.749019607843137)]61 a/ \& M  t+ V* A( f
    [color=rgba(0, 0, 0, 0.749019607843137)]77 \# a$ X# Q( o: a8 B0 F
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ; f6 M8 [% b! W9 k- L[color=rgba(0, 0, 0, 0.749019607843137)]9
    0 Q/ d, c3 n6 X+ L7 Q# p[color=rgba(0, 0, 0, 0.749019607843137)]10
    $ C8 n+ [* n0 W1 w% U[color=rgba(0, 0, 0, 0.749019607843137)]11  U9 d% E7 c$ v
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    - X% O) [. k/ l8 \+ I9 n[color=rgba(0, 0, 0, 0.749019607843137)]13
    3 ^2 n3 ~4 E# n: M[color=rgba(0, 0, 0, 0.749019607843137)]14  [$ u% N2 j& P( d- x
    [color=rgba(0, 0, 0, 0.749019607843137)]15
    5 h" Q! f+ E. N[color=rgba(0, 0, 0, 0.749019607843137)]167 a' v9 l" q! ?& Z
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    ( w* B2 v9 m* d[color=rgba(0, 0, 0, 0.749019607843137)]18
    * H, l0 A! ~, Z3 A- a, |[color=rgba(0, 0, 0, 0.749019607843137)]19
    , J$ g  B7 w8 }3 D[color=rgba(0, 0, 0, 0.749019607843137)]20
    $ g0 I2 w. S+ z4 v1 t3 u[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数" S9 \# W6 j/ \/ w5 I
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数
    " K! g& i& t& c! V[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)3 J3 h5 T% A- Q5 C# f  m- Z1 j
    [color=rgba(0, 0, 0, 0.749019607843137)]{6 l4 q/ r. z- z$ I+ e
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点
    % o& r& u- `) k  a  P5 j[color=rgba(0, 0, 0, 0.749019607843137)]        {
    & y1 S; b) |+ n' F# ~[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;, ~. l* C8 R- l- N; c8 {
    [color=rgba(0, 0, 0, 0.749019607843137)]        }% ~% u2 a0 }* t$ D9 ?1 r5 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空9 x+ S6 a% q# Z# B5 I
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)7 A! ?# G/ [, h2 K
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    : I7 v, l( m: X+ L  B7 T, {. |[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    9 Q6 r  O8 e6 O1 ^& w[color=rgba(0, 0, 0, 0.749019607843137)]        }6 _4 p) a/ x$ l
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);( X/ |8 J6 g# J
    [color=rgba(0, 0, 0, 0.749019607843137)]}$ |) V5 Y* n2 k- R/ O
    [color=rgba(0, 0, 0, 0.749019607843137)]1% d2 h* `/ P/ M  h% E
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    ' n  [+ Q- @* s/ ~[color=rgba(0, 0, 0, 0.749019607843137)]3# R. `; ^# j8 ]. a
    [color=rgba(0, 0, 0, 0.749019607843137)]46 w# V, M  `5 E  {
    [color=rgba(0, 0, 0, 0.749019607843137)]55 N- o! ~# X' Y8 j- A2 R
    [color=rgba(0, 0, 0, 0.749019607843137)]6$ _; i) t* @, [; N
    [color=rgba(0, 0, 0, 0.749019607843137)]7( i6 y6 l: G! ^! G: B" u) g( f
    [color=rgba(0, 0, 0, 0.749019607843137)]89 D( e, y$ [( q! C
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    # Y8 E  ^& t, i[color=rgba(0, 0, 0, 0.749019607843137)]10
    ' i0 r/ ?7 [" a" i; G" S[color=rgba(0, 0, 0, 0.749019607843137)]11
    6 b" P% o5 e$ e# [9 e, i[color=rgba(0, 0, 0, 0.749019607843137)]12
    . K0 R( R2 k$ d[color=rgba(0, 0, 0, 0.749019607843137)]13
    5 Q% p% r; b# m; U) V& N[color=rgba(0, 0, 0, 0.749019607843137)]14
    8 f0 |6 h( \- ^% k0 k1 j1 I  b[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    & x5 J) ^$ c5 |[color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)
    : b) }( ]! C. P[color=rgba(0, 0, 0, 0.749019607843137)]{, s4 m- \0 r3 [
    [color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0# ^! U: P0 l3 k9 A! Q) Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    6 u1 l9 a) c3 p" v* s8 R# w- u[color=rgba(0, 0, 0, 0.749019607843137)]        {1 z4 |/ a7 k4 U4 G) J+ N: x" {
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;1 F3 ]' C7 Q3 q% P) c8 X& l
    [color=rgba(0, 0, 0, 0.749019607843137)]        }' P1 M3 K2 i: W; ^. |8 W) L
    [color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树
    ' ^0 K% y' v2 S) K# H2 b6 K[color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度
    . j( W2 F! L0 i  b# V' Y, R[color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    $ i7 h. H- ]3 N8 i[color=rgba(0, 0, 0, 0.749019607843137)]
    / }* ~0 Q( a+ [+ [4 i$ l
      e3 A$ z5 D+ U6 D
    [color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;# X+ F1 V8 S4 _9 i5 l$ k
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    . @7 \# @2 M  ]$ k$ R2 e[color=rgba(0, 0, 0, 0.749019607843137)]1
    9 q2 ?7 c3 r* `: B0 G: h' p+ X8 z[color=rgba(0, 0, 0, 0.749019607843137)]2
    2 `* N8 B' U/ e; |$ }[color=rgba(0, 0, 0, 0.749019607843137)]3$ }7 D: x, R) D" ?
    [color=rgba(0, 0, 0, 0.749019607843137)]4+ F  z: h' M1 v0 E  F
    [color=rgba(0, 0, 0, 0.749019607843137)]5; U; D! ^& d. |. Z
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    * L# a( V, N& w- Q/ X, K, d[color=rgba(0, 0, 0, 0.749019607843137)]7. B# F2 Y" U7 [$ s
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    , g+ r  i1 {* k, h  W. @[color=rgba(0, 0, 0, 0.749019607843137)]9
    * f$ a0 Q# Z: _9 X2 B  O& B[color=rgba(0, 0, 0, 0.749019607843137)]10
    : Z2 G# q* w! i# r2 a[color=rgba(0, 0, 0, 0.749019607843137)]11: f& {" ~+ k# u" Q
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    ) f1 _! s' Q! g* ]) m. C9 n2 k[color=rgba(0, 0, 0, 0.749019607843137)]13
    # r' M8 R6 A. M+ I[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    9 s+ M2 x- ~- A, e- r- Z* a[color=rgba(0, 0, 0, 0.749019607843137)]
    7 ^' Y4 ~7 ^& [1 v- S& o, j0 g+ _

      t/ ?7 V5 Q) H1 |; F8 ]2 m9 R[color=rgba(0, 0, 0, 0.749019607843137)]
    ! d& x4 T% E! X( O. a

    ( M* E4 C( P7 y3 F[color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。
    - h% a4 K, [9 ~[color=rgba(0, 0, 0, 0.749019607843137)]3 F7 o6 f- ^& ~, i- r+ o1 g+ K. O
    : c! @& n& \' l8 I% t" E9 W
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数% I# [/ I# w  D* K+ m" I, D7 h
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)
    ; Q( s4 M4 g# z, O6 b  i[color=rgba(0, 0, 0, 0.749019607843137)]{
    ! t9 F7 s* \! K' W: |; p6 h[color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);% Z+ q! E2 u/ E2 b5 f
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    & @2 _. H+ k) a, }. r& g: ?% f7 E[color=rgba(0, 0, 0, 0.749019607843137)]        {9 B. t9 H: ]/ ^4 Q. m: z
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    & B- H  @7 e7 c% f: ~' [[color=rgba(0, 0, 0, 0.749019607843137)]        }
    - R1 f/ }% F# ]2 [& E& t8 U[color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)
    * y* |  i+ D2 ?  `& F# ]' w[color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)
    8 ]& D' ]; ]9 a[color=rgba(0, 0, 0, 0.749019607843137)]        {& d1 {4 G6 X! J7 e7 N/ @# e
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;& P! o, r! T5 T$ x5 y9 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    # l/ G4 Y# B3 P& q( B' L; @7 D[color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层
    8 q$ B! \0 |; r[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);! {* ?, a5 t6 u! Y9 N3 I6 b
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    5 g  k& S  c$ P- O[color=rgba(0, 0, 0, 0.749019607843137)]1
    $ X1 K( F( r! |[color=rgba(0, 0, 0, 0.749019607843137)]2& p2 C) q8 A/ R1 v1 W5 Z1 b& \; H
    [color=rgba(0, 0, 0, 0.749019607843137)]3, ]0 ]0 T- ^. [+ p3 o% C! I
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    1 ~! c" j2 t0 j  M7 r" N- l" u7 t[color=rgba(0, 0, 0, 0.749019607843137)]5
    : i. E# T# W6 z. {[color=rgba(0, 0, 0, 0.749019607843137)]6/ P; x% \, `$ k$ m
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    4 Y( I2 H5 s$ y, g[color=rgba(0, 0, 0, 0.749019607843137)]87 {3 [" l! E) `; J  }6 H
    [color=rgba(0, 0, 0, 0.749019607843137)]9; v) Y& S; q5 m
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    ) R0 H( H; B* u! U. ~: Y, K[color=rgba(0, 0, 0, 0.749019607843137)]11& Y& r! R0 _/ U7 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]12+ M3 y1 n5 ]' n4 t1 r; L2 F' S" B
    [color=rgba(0, 0, 0, 0.749019607843137)]136 _3 d6 x2 W( j" S+ X
    [color=rgba(0, 0, 0, 0.749019607843137)]14# V: y; v; F. Q9 c1 F& q% c# q
    [color=rgba(0, 0, 0, 0.749019607843137)]15
    - X$ b  z$ y  v! H[color=rgba(0, 0, 0, 0.749019607843137)]16
    * j$ E, C- R1 @1 [# O[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    1 p, t& W2 D7 D[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    $ z/ j3 R1 h' T[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    4 g2 r6 F% ^6 [# ?[color=rgba(0, 0, 0, 0.749019607843137)]{- s6 l4 W; G+ i" l) q2 B
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    , C( Q5 W( G) i/ r# C  o/ v6 J( ?[color=rgba(0, 0, 0, 0.749019607843137)]        {  K$ V! i. L) s1 H, W" I
    [color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;* L$ o7 e; T# `7 j$ R) j
    [color=rgba(0, 0, 0, 0.749019607843137)]        }$ H( o8 c8 Y0 y# ?9 ^3 t1 m2 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)1 G+ Z8 @& Z# A. ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    8 B; H% |+ ~; M% B1 Q[color=rgba(0, 0, 0, 0.749019607843137)]                return root;
    % }/ N) [% S6 N[color=rgba(0, 0, 0, 0.749019607843137)]        }
    & u0 r7 u! _. t# }; R[color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树9 v2 z9 M/ W! c! L- }
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);
    8 g- h+ l  ?* }- I[color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)
    2 L5 E" ~( Q+ z% c/ s6 q2 B0 m[color=rgba(0, 0, 0, 0.749019607843137)]                return lret;, Q4 b! b/ Q8 }; N1 |
    [color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树
    6 ]$ G! c3 _) O+ q/ |% \/ X[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);
    . D6 V# \# a% s0 h[color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    ( U" Y% f- U  [[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    4 J/ d  S  `: k( b6 |[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;3 F! g; m( y5 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    0 H9 P' S: t1 N, U: P7 C! x[color=rgba(0, 0, 0, 0.749019607843137)]————————————————2 s& }% m6 G, s, t) F
    [color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    $ m! z' i. m) ?- u( K[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212
    * T" V( R3 `4 ^6 ?* p2 f2 |* a' y* h$ |8 _/ X. k2 ]) H0 r
    : G' D, M2 C9 A* n
    [color=rgba(0, 0, 0, 0.75)]9 J6 o5 D8 h7 w; U2 E4 D( h

    0 L& @. f' h/ N  }9 \3 i* M& f
    9 }8 T1 X# m6 w' i4 u+ G
    0 k% [0 r7 V  M2 b* t  S, U; n
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-26 17:11 , Processed in 0.394802 second(s), 51 queries .

    回顶部