QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2461|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历
    ! N: H1 b+ V' z9 K2 [* s  w6 @2 n/ `1 f4 _* H* U
    [color=rgba(0, 0, 0, 0.749019607843137)]文章目录
    , R' R: A: s7 o2 G3 F9 o4 [[color=rgba(0, 0, 0, 0.749019607843137)]前言
    - c, I' ]0 V: C6 D8 u- Y[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    9 w) C/ Q, X0 u) q$ d9 m- e[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    5 ?. ]- U4 `' F; ]; X3 q[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    ) ^4 q! ^) j# [) E$ v[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小5 Q0 N  O' J2 H" m% b( G8 q
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数( Y% }$ k1 D& E/ p$ ]& R3 T2 y) `3 E
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    . X, \& [) i8 x" @( r3 h[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数6 f  h4 D+ z' I0 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找5 c- a. Q% h3 a: r; _
    [color=rgba(0, 0, 0, 0.749019607843137)]前言
    9 r8 {, R' X, Z: ~( t2 K. H[color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。7 y/ @0 G% Z" _# {3 D
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 R) u  y7 c6 v
    * [& x. Y! v6 f3 s& [( u; y
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式: q) }0 H, T3 E. j1 Q  _) q0 W: H: t6 E
    [color=rgba(0, 0, 0, 0.749019607843137)]
    0 ^1 ?+ ~! l0 d4 |

    4 m9 n5 p2 e: B- h# s[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:2 a( R7 P; |8 _1 q, T
    [color=rgba(0, 0, 0, 0.749019607843137)]
      `0 b5 L8 j3 F, t& y

    5 ?0 ~! j4 }& S6 N) R' F$ e[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树
    6 {! r+ D5 ?% M: b0 O[color=rgba(0, 0, 0, 0.749019607843137)]: d: Q; A3 `- {! P+ J

    , s# ~0 f7 P6 C; t% s[color=rgba(0, 0, 0, 0.749019607843137)]
    ) w6 ^: E2 G& @  Z  U% R9 Q9 M, v; @* c
    ; L- ~$ ~* c/ j# F+ M
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树
    ) Y) N" [) q9 w( c[color=rgba(0, 0, 0, 0.749019607843137)]
    % l: }1 c7 s; m' H3 a

    ! j) k6 \% x- e/ F[color=rgba(0, 0, 0, 0.749019607843137)]0 N7 g" y- p7 r: m8 M8 J

      F0 K8 y$ p, M+ a( q0 m6 S[color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根/ ?5 M7 h1 `) E! R7 y6 a  z
    [color=rgba(0, 0, 0, 0.749019607843137)]
    5 U+ S" G, ?# {: `
    % E) U- A3 T0 Z) {* B9 F
    [color=rgba(0, 0, 0, 0.749019607843137)]6 {/ w0 H9 W( l* q

    " e  ]5 c* ^0 h1 I( w5 C* I  `- B5 }3 L[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    2 J" L2 j6 o& k/ f# n) \[color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之  G; }% D3 `: h9 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;
    $ ]! c2 L% I; x' {, k; n- b[color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;0 |, U) X, u* x
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);
    . _! s- t% G- a9 }2 M4 g7 A  s[color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);
      B/ W$ Z+ ~. G3 h[color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);* ~  F) |+ N% Q; v2 s2 B7 f* R# R+ a
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);5 W& N% D: F1 ]5 M5 X" S
    [color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。
    + x# ?" o1 M$ h0 Y$ m# I[color=rgba(0, 0, 0, 0.749019607843137)]
    - i7 _* B- y% C' B4 ]5 R

    6 \. D2 J! x3 C( {0 C& H' P[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    0 R9 v3 ^  f5 N6 e- t: d# v[color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    : G) `' l) Q* b- x5 e[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>
    ' N% k2 I- S+ g! S9 q: R7 j[color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>& ^. T. y) s5 x) {8 o/ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>* f9 \) N0 N' P; F8 @2 j% w
    [color=rgba(0, 0, 0, 0.749019607843137)]2 \+ P3 S, `+ h5 w
    0 M# B: l5 u& C; H- K
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;
    % D+ j3 i$ F; c# |! p0 F  k% I[color=rgba(0, 0, 0, 0.749019607843137)], k, k% A( W: Z( M6 B
    + ~. R6 L3 g) h, t! r* j* \
    [color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体
    " `) C# h! l" d1 L3 q[color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    0 [# v# G. T* [9 V[color=rgba(0, 0, 0, 0.749019607843137)]{! |" G$ L& e' `+ `# g( J% Y$ x
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;- D# t0 L$ {8 m( {
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;
    ! s! D' }' y9 ?1 d& ][color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;
    ; Q  b; V2 O, u% g  ~6 w[color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;2 c" p+ S* O$ p" W8 p4 W( j+ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & e% }: V# j! g; |6 S& e

    $ h& e; |8 w0 E2 m( M: C[color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历. s0 J& y" y; H  K+ p( R
    [color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)$ |# e( I' w( B
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    ( W. y# q) ?& t: S# n[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)% J0 r* a& g+ o; M: }
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    & b! k+ t+ m2 L4 k* y[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");+ D) }6 @& R$ Q/ N: y
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    ! D- t- Y4 x/ `  c* r0 ~) K: a[color=rgba(0, 0, 0, 0.749019607843137)]        }7 |- j1 ?0 q& q0 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    , P! U) O& G& l# l7 ?, {[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);
    1 u0 S. Z2 c  U* w/ ?* l$ a[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);
    5 r; h+ T( V, @; F3 b[color=rgba(0, 0, 0, 0.749019607843137)]}/ {" s6 u  K% K( o9 D( J# M
    [color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历
    4 A6 }3 F9 d# x[color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root), G; l) V+ `  X5 g, u$ I" Y
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    , |5 n' }3 A5 h& G( g1 h[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL); s! N7 ?% L/ [. O5 B# C" I5 [
    [color=rgba(0, 0, 0, 0.749019607843137)]        {4 C$ r$ U  I3 M- `3 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    9 Q" C& H2 }2 Q% A/ [; |* r[color=rgba(0, 0, 0, 0.749019607843137)]                return;; r& O! x- N$ R
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    / [: g  s& _9 o* x, G[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);* X" e9 p/ h9 X) ]/ L7 m2 X
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    4 q* V4 r. z9 w% h( N[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);& @, n0 n( T1 z0 f  w, }
    [color=rgba(0, 0, 0, 0.749019607843137)]}. ^6 k" Z+ E$ T
    [color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历! M( t5 F0 x9 u- X) F' K
    [color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)
    2 @2 f5 j! A$ K[color=rgba(0, 0, 0, 0.749019607843137)]{- _$ p- {; X# n
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    - Q! L8 Q" G" n0 k0 t! {[color=rgba(0, 0, 0, 0.749019607843137)]        {
    ! S$ l1 Z5 R0 _3 d[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");9 l1 ^) M. o2 y
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;
    * G% o$ z9 R, n[color=rgba(0, 0, 0, 0.749019607843137)]        }
    ) K5 M5 y& e) `% e5 g[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);
    # K7 @" Y/ C  M% u4 y% _8 i[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    ! u% W% I& ~7 }# \4 v. k) r[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);$ |1 S  ]) s6 i: f& D7 z
    [color=rgba(0, 0, 0, 0.749019607843137)]}8 k$ p3 D7 W2 z
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构+ M& A6 P( i& Z; A+ }! H0 q
    [color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()" o; I! Q9 l# l" R/ ?) W! R7 n
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    " H* Z" Q4 i5 C# v$ r6 ~* L) i[color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间4 j' n3 Q" F  l8 Z9 P; R
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));7 f$ A, o! N  |$ X% ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);
    : q) E$ H# j4 q  r+ w[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));
    ; i! |/ Z9 s9 t3 @4 H* O[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);" K1 ~# L. f4 w; ?( V  C: z
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));4 c6 i7 |+ e! n. C5 Y, T
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);
    5 Y, r9 s/ ~3 ~# l8 F$ z[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));4 j% H5 P4 S9 n$ A9 l; Q
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);& a3 |2 R! m- _9 r* a: _  @( Q& \% g
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));
    ' u  l! V% D; P% ^4 N7 L[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);$ `. w2 ]% B5 z+ p
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));
    8 P, l; o/ c( b9 R[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);3 x' U/ n2 \+ T  d# M( R+ B
    [color=rgba(0, 0, 0, 0.749019607843137)]* H$ q# ?% D: x- K. {% H. w

    ! f2 d9 S2 `+ s1 ~- j' G7 |* o7 m[color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;( x$ ~$ x& g4 i
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;! `# |. N, ]0 Q. M6 v$ i7 w& g
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;
    % j9 W1 J: O4 A0 G' P1 E: C[color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;
    + f- Y$ l+ ?6 b, n[color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;8 E/ K5 V$ A$ ]  c3 n1 O0 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;2 e9 W- g0 R! E1 }' {/ R8 x
    [color=rgba(0, 0, 0, 0.749019607843137)]; g7 O3 u: F8 z: ]4 w# L& @* I
    2 q6 R8 a+ v7 S0 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;
    : H: O" n6 {( `2 {1 L[color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;" C9 s; O  S+ E, l* Y. y
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;' L- q9 v6 T9 w2 z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;
    % D" ^7 U, S  |5 J% `( E0 ^[color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    ! j( e3 k8 g( o+ {[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;
    9 d. J9 A# q% j% y[color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;
    # C* l6 ]! I: n4 t+ z7 Q[color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;
      o% w5 n! j" ]" P. e2 r[color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;
    3 h: _/ p8 V( g[color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;
    6 p) ?" c) K# S: S% E9 i. j[color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;4 y: N6 Y) Q1 m1 |4 g. Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;
    : M' J/ m- ], Z6 ?$ a2 N[color=rgba(0, 0, 0, 0.749019607843137)]
    : f5 a3 L- b; @3 ~, N

    - [6 U2 u  k/ w. w, H+ L. U[color=rgba(0, 0, 0, 0.749019607843137)]        return n1;; w' W  @% o& d' n
    [color=rgba(0, 0, 0, 0.749019607843137)]}8 }# }) x$ y; k, q/ ]7 d' c
    [color=rgba(0, 0, 0, 0.749019607843137)]8 b- b2 s3 j  \$ |
    - }# c. I' Q8 I  c# C5 j4 k
    [color=rgba(0, 0, 0, 0.749019607843137)]int main()4 N2 q4 H+ a, x: g0 U8 q
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    ( j2 a5 v/ [) J' z+ S3 e7 q$ ~; N[color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构# b$ m+ Y2 ~) j% }
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();" ~5 a: `  @8 s7 {
    [color=rgba(0, 0, 0, 0.749019607843137)]0 c8 F; F, Y/ Q- {- u) a1 w
    1 V- f1 x: j2 |# S
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    & X: x. }) O; ?" B* A4 ^5 _9 O[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");
    + Z: [, C2 F- l+ R* S0 A. z- [& S. N[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    # g$ ?  g7 D# p[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");8 w9 X/ N  ?* E2 A; G( m# m: a
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历
    % w! j; T  _( I5 w1 |[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");
    8 X8 R0 H' Z+ _, h[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    ; D/ W# n0 w8 q! W8 y[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    ' y3 G! I9 {; Z8 a6 g[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历
    5 a2 V! n* ~' {0 X) n[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");2 U/ \( b% L/ X* j9 `: r$ j
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    " t- W. c: O; F[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");" W6 K# C% E0 h
    [color=rgba(0, 0, 0, 0.749019607843137)]+ a9 J$ Q; i. {5 l) I7 u8 Y

    9 H  o/ c' A; n. F& U3 ~/ s9 r7 B2 _[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;: K5 d% R% i" U! j- S! Z  x
    [color=rgba(0, 0, 0, 0.749019607843137)]}& |1 Q: Y2 X/ Y1 q, p7 M
    [color=rgba(0, 0, 0, 0.749019607843137)]14 @$ P0 d/ |3 U$ z! i
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    & t' x9 G, W4 a! z: A[color=rgba(0, 0, 0, 0.749019607843137)]3
    0 s* d. L5 f  R; V: @+ r) b[color=rgba(0, 0, 0, 0.749019607843137)]4
    ( t' A! y( R  ?7 z: r2 }4 F4 p& l[color=rgba(0, 0, 0, 0.749019607843137)]5
    ( l6 O  m, N7 {/ |2 h- D[color=rgba(0, 0, 0, 0.749019607843137)]6, d+ [: W( M  T
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    8 _* k; ]+ H7 P# q) J[color=rgba(0, 0, 0, 0.749019607843137)]8
    , N* _2 N; M/ w6 J- H( j[color=rgba(0, 0, 0, 0.749019607843137)]9
      H( r' Z1 V9 U[color=rgba(0, 0, 0, 0.749019607843137)]10  j- E( [: W2 X4 ?. X) ?0 p) Q
    [color=rgba(0, 0, 0, 0.749019607843137)]11; y6 a4 R) |& [% I
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    - d7 P) ]- o# }: G: h, f[color=rgba(0, 0, 0, 0.749019607843137)]138 d" Y3 i% y! x8 C
    [color=rgba(0, 0, 0, 0.749019607843137)]14# ~/ K( k! D6 M, F& |1 t
    [color=rgba(0, 0, 0, 0.749019607843137)]155 \- N0 R/ c- z' |: z. Q
    [color=rgba(0, 0, 0, 0.749019607843137)]16
    * W3 a! i% w7 Z7 A+ x[color=rgba(0, 0, 0, 0.749019607843137)]17/ W% t9 _2 T' e0 P! T; x
    [color=rgba(0, 0, 0, 0.749019607843137)]18
    - F" l) v+ e5 d# R+ m[color=rgba(0, 0, 0, 0.749019607843137)]19) J1 G1 X; i4 J( l
    [color=rgba(0, 0, 0, 0.749019607843137)]20+ s! V3 A4 l7 t
    [color=rgba(0, 0, 0, 0.749019607843137)]21
    ) r0 K/ I8 Z7 n6 I( n' F[color=rgba(0, 0, 0, 0.749019607843137)]22
    . Z/ \$ X- B% n% V% q[color=rgba(0, 0, 0, 0.749019607843137)]234 s3 S0 i5 N- Q6 p( ?& o
    [color=rgba(0, 0, 0, 0.749019607843137)]24
      V4 e# k% y' T8 w1 y+ h; u3 x% N[color=rgba(0, 0, 0, 0.749019607843137)]25- o& o9 a1 H/ \' u
    [color=rgba(0, 0, 0, 0.749019607843137)]26' N2 r. `! x! V
    [color=rgba(0, 0, 0, 0.749019607843137)]27# ~: P% U& g  n+ `, q
    [color=rgba(0, 0, 0, 0.749019607843137)]28
    + a" V7 O9 f8 \: V$ f: V: z6 y[color=rgba(0, 0, 0, 0.749019607843137)]29
    " K  s4 Q# v* I1 l" Q[color=rgba(0, 0, 0, 0.749019607843137)]30
    ' v" X' c' Y9 G1 n5 D9 W1 e) r; w[color=rgba(0, 0, 0, 0.749019607843137)]319 J: P/ X' c9 q; Y# B( ]* b
    [color=rgba(0, 0, 0, 0.749019607843137)]320 c$ _+ E( ?$ ^: t- m8 T
    [color=rgba(0, 0, 0, 0.749019607843137)]337 N$ y$ x- f+ }- ]7 B( E" _
    [color=rgba(0, 0, 0, 0.749019607843137)]348 a" H: N2 ~( ^2 H  N
    [color=rgba(0, 0, 0, 0.749019607843137)]357 w8 e* K: O8 G# T! t
    [color=rgba(0, 0, 0, 0.749019607843137)]36) k! s  m0 n2 h) G
    [color=rgba(0, 0, 0, 0.749019607843137)]37
    / ?8 x7 C1 n. `& z. u2 s$ k[color=rgba(0, 0, 0, 0.749019607843137)]387 C# z* j3 |% N! U6 L! U7 g
    [color=rgba(0, 0, 0, 0.749019607843137)]39  F( T2 i1 Y4 C4 d1 Z8 g
    [color=rgba(0, 0, 0, 0.749019607843137)]40
      A& ?0 T, i+ I  F2 @9 [[color=rgba(0, 0, 0, 0.749019607843137)]41
    ; ^# k, z/ X& K9 ?[color=rgba(0, 0, 0, 0.749019607843137)]42
    * X5 D3 @- a: g2 f# v" o  n[color=rgba(0, 0, 0, 0.749019607843137)]43
    ; S6 V/ w1 W0 u0 t0 i$ s/ O[color=rgba(0, 0, 0, 0.749019607843137)]44
    ; M4 i" F8 y; r! n" d[color=rgba(0, 0, 0, 0.749019607843137)]457 w5 n) }' ]) I& j8 f
    [color=rgba(0, 0, 0, 0.749019607843137)]46
    ( F& ~# K- B: @[color=rgba(0, 0, 0, 0.749019607843137)]47
    9 h) r# e/ ^" ?; _8 {) u[color=rgba(0, 0, 0, 0.749019607843137)]48
    ! @1 @( c, p& d9 P; V' a$ h[color=rgba(0, 0, 0, 0.749019607843137)]49' {% c9 z0 |5 d& O4 U0 K
    [color=rgba(0, 0, 0, 0.749019607843137)]50; P! z8 Q$ z3 B1 F, M3 E7 g
    [color=rgba(0, 0, 0, 0.749019607843137)]51
    2 M7 D$ V% K$ ]1 M7 Z[color=rgba(0, 0, 0, 0.749019607843137)]52
    ; a& f8 c( `& p* u5 Q' C[color=rgba(0, 0, 0, 0.749019607843137)]538 i# s, g0 i( \9 I1 ^4 o4 d
    [color=rgba(0, 0, 0, 0.749019607843137)]54
    : M1 D, m: `* d3 w* H% I; @[color=rgba(0, 0, 0, 0.749019607843137)]55
    ; B- p/ C# B+ P9 y2 ]4 o[color=rgba(0, 0, 0, 0.749019607843137)]56, ~1 ^% L' j+ h7 v7 [
    [color=rgba(0, 0, 0, 0.749019607843137)]57- C- ^) k3 w0 B( R1 a
    [color=rgba(0, 0, 0, 0.749019607843137)]58( u; a  u. X5 k4 |  l: [* w
    [color=rgba(0, 0, 0, 0.749019607843137)]59
    " ]6 O& Z* \. z7 S$ ~[color=rgba(0, 0, 0, 0.749019607843137)]60
    0 i( O# Q% n7 M% u  r[color=rgba(0, 0, 0, 0.749019607843137)]615 j* w2 q/ x4 ?0 N( j  G7 b
    [color=rgba(0, 0, 0, 0.749019607843137)]62% `0 x4 p0 m% J; j
    [color=rgba(0, 0, 0, 0.749019607843137)]632 o4 m$ n' u: k* `# i) J5 k: E: S
    [color=rgba(0, 0, 0, 0.749019607843137)]64* S6 H# E: U( D4 h
    [color=rgba(0, 0, 0, 0.749019607843137)]65# I; ?2 b2 O; e, X. ?( F
    [color=rgba(0, 0, 0, 0.749019607843137)]66
    " i$ b8 c9 S9 z[color=rgba(0, 0, 0, 0.749019607843137)]67
    - m. j; G; j5 N9 `[color=rgba(0, 0, 0, 0.749019607843137)]68
    ) x' N& I# C4 _' @* A3 a[color=rgba(0, 0, 0, 0.749019607843137)]69
    4 @& S$ ^. {) N; c  L+ v+ p5 L[color=rgba(0, 0, 0, 0.749019607843137)]70
    8 M4 \3 ?( L$ h[color=rgba(0, 0, 0, 0.749019607843137)]71
    ! `9 O% O% x) u2 d9 x2 d* {6 O[color=rgba(0, 0, 0, 0.749019607843137)]72  w& y( M+ J$ [+ d. q
    [color=rgba(0, 0, 0, 0.749019607843137)]73
    + R' S% R* d+ v# k. E[color=rgba(0, 0, 0, 0.749019607843137)]74
    % Q$ Z: F8 Y2 S5 U$ Z% v" X[color=rgba(0, 0, 0, 0.749019607843137)]75
    / ]7 E7 `  x( Q[color=rgba(0, 0, 0, 0.749019607843137)]76  L9 f1 p1 Z) c- b( C- r% S) `& N
    [color=rgba(0, 0, 0, 0.749019607843137)]77
    $ }5 u# b1 V$ ^( a% o2 m8 C[color=rgba(0, 0, 0, 0.749019607843137)]78
    1 B7 _4 q+ A$ ]- A0 k$ g[color=rgba(0, 0, 0, 0.749019607843137)]79
    ; h1 u" v* K7 f+ T2 X[color=rgba(0, 0, 0, 0.749019607843137)]801 H7 A( b- M: y7 z( m/ a/ S; s* t
    [color=rgba(0, 0, 0, 0.749019607843137)]81
    7 E# E# ?6 t- d4 X, N8 T[color=rgba(0, 0, 0, 0.749019607843137)]82
    4 `8 ~; m) L- A, _+ {[color=rgba(0, 0, 0, 0.749019607843137)]83" {9 |' H( s: d9 l" U, ~: F7 M7 b
    [color=rgba(0, 0, 0, 0.749019607843137)]84( y& m2 I+ U8 |- A
    [color=rgba(0, 0, 0, 0.749019607843137)]851 @  Z" T- E0 d  W) a- j# r% n
    [color=rgba(0, 0, 0, 0.749019607843137)]86
    ; h9 C+ |1 ]2 N! N[color=rgba(0, 0, 0, 0.749019607843137)]87
    ! L) A0 v( }$ n1 |2 L% v$ ~$ w[color=rgba(0, 0, 0, 0.749019607843137)]88
    - k6 ]  S! V/ m5 ?6 e2 O[color=rgba(0, 0, 0, 0.749019607843137)]89  Y- X+ f$ A) ^* |5 e( U7 I
    [color=rgba(0, 0, 0, 0.749019607843137)]90- N* D0 ]4 z" w8 ?: \
    [color=rgba(0, 0, 0, 0.749019607843137)]91
    * u% @1 X; z( p( L7 c0 b- T& e[color=rgba(0, 0, 0, 0.749019607843137)]92
    $ S3 Y. G& R) S[color=rgba(0, 0, 0, 0.749019607843137)]93/ z% g* a5 w' Z6 v
    [color=rgba(0, 0, 0, 0.749019607843137)]94
    2 v1 o2 `- I! m6 s[color=rgba(0, 0, 0, 0.749019607843137)]95
    0 Z# w4 U9 Y( ~9 }3 B+ a[color=rgba(0, 0, 0, 0.749019607843137)]96/ m. u: w3 Z' V/ g) n; J7 b) A
    [color=rgba(0, 0, 0, 0.749019607843137)]97; \% K9 ~2 c( O! n
    [color=rgba(0, 0, 0, 0.749019607843137)]988 \0 w/ n( S4 J, `
    [color=rgba(0, 0, 0, 0.749019607843137)]992 a( D- S+ L, y4 M6 `1 {0 d
    [color=rgba(0, 0, 0, 0.749019607843137)]100
    ) {& w; M4 K( `7 N/ x% Y[color=rgba(0, 0, 0, 0.749019607843137)]1019 K. n7 |% w, l7 T$ E, H8 R
    [color=rgba(0, 0, 0, 0.749019607843137)]102
    6 w4 o! {: C/ w) p$ a[color=rgba(0, 0, 0, 0.749019607843137)]103
    4 \+ D# N; P. x  d[color=rgba(0, 0, 0, 0.749019607843137)]1048 ?: O$ u/ y' B9 `
    [color=rgba(0, 0, 0, 0.749019607843137)]105
    7 P3 {0 D+ D5 C6 ?[color=rgba(0, 0, 0, 0.749019607843137)]106; g' J9 W% U6 g. r4 M+ m& c: \, g
    [color=rgba(0, 0, 0, 0.749019607843137)]107
    - o& R. i* |% e" v' O$ d[color=rgba(0, 0, 0, 0.749019607843137)]108
    ' h( G% o% ?) o5 E  e[color=rgba(0, 0, 0, 0.749019607843137)]109. e# j0 l& R7 q$ s4 K/ L! v% K
    [color=rgba(0, 0, 0, 0.749019607843137)]1104 }/ \! M3 V; u8 j9 x
    [color=rgba(0, 0, 0, 0.749019607843137)]111! t8 o% U( ?; d7 @3 W
    [color=rgba(0, 0, 0, 0.749019607843137)]测试结果:; A& @. y; O) G! |, Y
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ( v/ i+ T6 X/ ]/ o. E

    & {7 |6 j: W6 X  J; H  n1 o4 E[color=rgba(0, 0, 0, 0.749019607843137)]) g: _: V- _4 S7 B( ^' v

    - ?2 {( J+ s# Z% G7 W( q3 P[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    ( Y$ [" x: |/ f- ~# W[color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)2 s' R& v% h9 E7 @+ R
    [color=rgba(0, 0, 0, 0.749019607843137)]2 w* p5 C1 t. N; V% I9 |7 _+ n
    ' R0 l9 R! e/ o# a! O: J( e$ x7 u( A
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小
    + S8 W; f! [8 s" _7 o[color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量2 S1 I; T$ H& }3 k
    [color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;# V9 C# T" o% e  K
    [color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)
    + n/ M* k- s( F8 _( X  M[color=rgba(0, 0, 0, 0.749019607843137)]//{
    , n/ R' @. T& m' R- R' R[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)& Z+ s# a" s, C- |: o
    [color=rgba(0, 0, 0, 0.749019607843137)]//        {
    ( b+ i" \! w# X# }: `, }0 i[color=rgba(0, 0, 0, 0.749019607843137)]//                return;; B6 x3 l9 D& l. t8 X
    [color=rgba(0, 0, 0, 0.749019607843137)]//        }5 ?- |1 O$ w- W
    [color=rgba(0, 0, 0, 0.749019607843137)]//        count++;. C- g/ k: a  y0 A- U2 X% J
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);
    " O: B6 A6 I! i3 p4 X0 S3 W& U[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);
      g8 C. y! o9 G- I& h[color=rgba(0, 0, 0, 0.749019607843137)]//
    3 x! r& _  x/ r. l6 M* o  f4 d* f[color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量
    + r: @7 n- h" a; s8 f[color=rgba(0, 0, 0, 0.749019607843137)]//}
      ~. C/ e; n6 q7 q1 `7 g[color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之
    2 f! G2 v( ~; E& Y! `3 D[color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)
    & }  t% c8 X( f% X9 w& u5 W[color=rgba(0, 0, 0, 0.749019607843137)]{# N& k- ]; @  [# x& K
    [color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;5 j4 V( _$ c6 g/ x2 t
    [color=rgba(0, 0, 0, 0.749019607843137)]}3 j- D- @7 S) P3 s& l$ m
    [color=rgba(0, 0, 0, 0.749019607843137)]1) y$ e6 ~5 Y9 x6 R+ A
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    9 o7 n1 i9 c8 a- V+ U[color=rgba(0, 0, 0, 0.749019607843137)]3
    0 Q2 g' @( n. i* n[color=rgba(0, 0, 0, 0.749019607843137)]4
    * d  `9 y1 e. g[color=rgba(0, 0, 0, 0.749019607843137)]5
    9 ^( ?+ H+ I  J+ A8 F[color=rgba(0, 0, 0, 0.749019607843137)]6
    , K- r! o; S7 q+ S[color=rgba(0, 0, 0, 0.749019607843137)]76 S9 Z0 [* e# j
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    % o2 ?. `' b! f; v( h% W. p[color=rgba(0, 0, 0, 0.749019607843137)]9
    . ~" q2 ~0 P! \8 q" r( ~[color=rgba(0, 0, 0, 0.749019607843137)]10: F  z% @8 F* W6 }
    [color=rgba(0, 0, 0, 0.749019607843137)]112 j# m* Q+ p5 u: D
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    8 u9 H) b2 u* D* b[color=rgba(0, 0, 0, 0.749019607843137)]132 L7 X4 R" @5 N- C
    [color=rgba(0, 0, 0, 0.749019607843137)]146 ]* R6 @" f8 S6 ^6 n9 u+ y
    [color=rgba(0, 0, 0, 0.749019607843137)]15% U) ~" w2 ~0 I) i- ~/ p8 Y0 y
    [color=rgba(0, 0, 0, 0.749019607843137)]16
    - X" m& C" L, r+ o- ][color=rgba(0, 0, 0, 0.749019607843137)]17
    ' I+ w) N$ c+ }  y[color=rgba(0, 0, 0, 0.749019607843137)]18
    3 T( m. R" a1 X7 w* i2 r" g[color=rgba(0, 0, 0, 0.749019607843137)]19
    2 c% u( }2 q; `' a/ M+ a  H[color=rgba(0, 0, 0, 0.749019607843137)]20
      K( D! e" \# W5 ~+ W[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    3 @( j- ^. ?' ^5 ~+ D[color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数
    3 Z' c" D9 d; L# r, ]% r[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)# ^2 c" {. `4 E1 K( H0 D0 B
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    , k. o4 @" z, r3 U9 o  H: t# Q. ][color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点
    5 `  L+ w7 o/ W' Q' t+ I[color=rgba(0, 0, 0, 0.749019607843137)]        {
    / k5 c- k% j) G! z( N[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;5 i, c4 ~4 u7 L' F
    [color=rgba(0, 0, 0, 0.749019607843137)]        }' ~7 S$ Y' Y$ z0 i; k+ f
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空
    1 |2 [' y) D9 M[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)
    3 j% |: N: H0 @# F8 J% u, h[color=rgba(0, 0, 0, 0.749019607843137)]        {* W* M% A: E" g& q- P# _  h
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    2 O0 t8 N' v% ^$ g4 X[color=rgba(0, 0, 0, 0.749019607843137)]        }
    0 q1 g; L+ }6 V( ~[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);
    + Q! y- K. a4 \& S0 P# i" w[color=rgba(0, 0, 0, 0.749019607843137)]}4 X. R: m& |0 o' d1 W7 b" n
    [color=rgba(0, 0, 0, 0.749019607843137)]18 I2 _, o7 u+ b
    [color=rgba(0, 0, 0, 0.749019607843137)]23 S$ q# A! Y+ O% a
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    1 ?2 k8 U4 i- _  k4 f1 C[color=rgba(0, 0, 0, 0.749019607843137)]4' t0 u8 i, r& ~" _+ V- R
    [color=rgba(0, 0, 0, 0.749019607843137)]55 q! H. |, L7 z
    [color=rgba(0, 0, 0, 0.749019607843137)]6  a. K) F) ]3 W! V& R' w  E
    [color=rgba(0, 0, 0, 0.749019607843137)]7* l% ^+ i* n2 M& q
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ! e3 i' i0 x  ]. i  B  i5 N# O) T[color=rgba(0, 0, 0, 0.749019607843137)]9# m, L& _9 u4 Y; u) i, ^
    [color=rgba(0, 0, 0, 0.749019607843137)]10$ {6 C3 y* v1 n  n5 O1 b. T
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    6 K/ j+ ?/ R, E  j1 o[color=rgba(0, 0, 0, 0.749019607843137)]12
    $ {3 Q' s2 O! R+ f" o[color=rgba(0, 0, 0, 0.749019607843137)]13, E) x" E1 d- v) l) B3 o! ?
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    8 v5 n$ v$ C( H8 V; V+ L$ F3 i% L[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    % c) t1 F# A% i. C  M% ][color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)8 a* X5 b5 a3 X! O
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    ; _* A6 R" F0 [  R2 `[color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0' [# H: e# i* e3 M$ Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)( \' P; y- A( w! d3 b; A5 a; m, c
    [color=rgba(0, 0, 0, 0.749019607843137)]        {, N8 A1 C) \% H! \; ^1 l. R" q
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;9 ^! c2 S% z4 N5 }, N
    [color=rgba(0, 0, 0, 0.749019607843137)]        }2 S: b( ^! ]- S- r6 [7 d( L; k/ M" H
    [color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树
    . Z' x( ?4 o+ `! Q* s[color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度0 g) V# Y! Z) I' ^! F
    [color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    6 F1 q3 x' ^% }. b" _) N[color=rgba(0, 0, 0, 0.749019607843137)]
    8 {; n% o1 m0 K# I

    * D  ]) n! O6 F. e6 f# N. T. S$ I6 a[color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;
    ) j4 u  j7 u% T' P  N[color=rgba(0, 0, 0, 0.749019607843137)]}
    0 b: n1 }: t$ w  _0 U. c: _4 s/ [% p  R[color=rgba(0, 0, 0, 0.749019607843137)]1
      M  |- N3 ]+ ^7 ][color=rgba(0, 0, 0, 0.749019607843137)]2
    % J' E% p6 Y* f% U. t/ y+ B[color=rgba(0, 0, 0, 0.749019607843137)]3
    9 o1 ~; [: o& V* a: L[color=rgba(0, 0, 0, 0.749019607843137)]4
    3 G% U1 {  n5 g: L[color=rgba(0, 0, 0, 0.749019607843137)]5' R1 R$ K# Z) M6 i2 h; n
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    2 ?: T# G4 J  Z  ]' w- E[color=rgba(0, 0, 0, 0.749019607843137)]7
    , J& @) w" z+ [$ s; N9 ]; m' I[color=rgba(0, 0, 0, 0.749019607843137)]8" ?* T" I) Q5 b2 \: D4 W# t8 `
    [color=rgba(0, 0, 0, 0.749019607843137)]9  |, L: }; o' K9 k5 G. Q6 p# L& j* e
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    - P! m3 V- i2 z, {[color=rgba(0, 0, 0, 0.749019607843137)]11
    9 k5 Y. |. `) }5 H, ][color=rgba(0, 0, 0, 0.749019607843137)]122 u  A1 D$ N5 |* F+ \! V
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    5 C( {  Q9 R) p* L3 {[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    0 f( z& I& N$ E4 E[color=rgba(0, 0, 0, 0.749019607843137)]% z, H& U/ y# I* U
    , N3 S4 l( e5 Z7 c
    [color=rgba(0, 0, 0, 0.749019607843137)]6 {7 W( w" ~: m$ [$ B4 G# {
    ' u7 [  i; Z- `. K" H
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。
    ! v  o& h$ ]# O! P* b; |( l1 G[color=rgba(0, 0, 0, 0.749019607843137)]0 S" h& Z3 }; [
    6 l% U3 A% c+ b  P( d& m0 U  E
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数
    : Y* i$ J) t* @$ R. w6 j3 ~5 ~$ S[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K); Q+ C( Q, M( p1 V7 D
    [color=rgba(0, 0, 0, 0.749019607843137)]{0 k; C) i5 [6 {
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);
    9 w6 X: j* K# `7 X2 T; Y[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL). O0 g( I9 n0 G. i% z9 a9 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    . F# J+ P4 ]: p[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;6 B- }  G# s  [* J- z$ `
    [color=rgba(0, 0, 0, 0.749019607843137)]        }: L, P3 _$ e: H0 n, ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)" ~1 q- w* N9 W; S+ d( c
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1), P) V1 f7 |2 u' P, b" H$ d% s
    [color=rgba(0, 0, 0, 0.749019607843137)]        {; k. c# b8 l! z) D
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
      I& s# |" H5 F, J$ p: h; a2 V[color=rgba(0, 0, 0, 0.749019607843137)]        }
    ) h2 d, o% @1 P$ H7 l. C8 S[color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层
    : [. ~. Y* Z& E# Q/ b* I: a[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);4 t3 u( v2 x4 ~+ D
    [color=rgba(0, 0, 0, 0.749019607843137)]}5 Q2 J+ J; \; l) p- Z
    [color=rgba(0, 0, 0, 0.749019607843137)]17 ?* u/ T# D6 F' Y
    [color=rgba(0, 0, 0, 0.749019607843137)]26 M6 Q# c: t3 w' ?* q9 E& v
    [color=rgba(0, 0, 0, 0.749019607843137)]39 b. _! p* o. e0 y6 m
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    ! \' V4 i( J: g8 A8 i[color=rgba(0, 0, 0, 0.749019607843137)]5
    6 D2 [. K9 }. K% j[color=rgba(0, 0, 0, 0.749019607843137)]62 j, q, A+ D* n# a: u
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    1 T# v( I8 K1 J- D+ P[color=rgba(0, 0, 0, 0.749019607843137)]8
    ! G" K. I( o; {8 P5 O/ G3 u: M) s[color=rgba(0, 0, 0, 0.749019607843137)]9
    5 C7 c  K# L6 V3 m# E[color=rgba(0, 0, 0, 0.749019607843137)]10; I$ ?# O6 T/ a" G9 u
    [color=rgba(0, 0, 0, 0.749019607843137)]118 o( b3 x& E. J9 P
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    . o$ M% B* V2 u/ l[color=rgba(0, 0, 0, 0.749019607843137)]13
    : o4 m% L& N! e[color=rgba(0, 0, 0, 0.749019607843137)]14
    ) r# \' t- Y! S3 ]7 {[color=rgba(0, 0, 0, 0.749019607843137)]15
    1 @" m+ p% y/ v3 Y% A[color=rgba(0, 0, 0, 0.749019607843137)]16
    ( `5 ^/ }5 U  i' Y& m[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    * D2 ]/ u% M8 p4 N* `" p2 S' r[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    6 t( g7 T% v8 S/ p[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data). Q3 ?4 y" X5 \- t9 c9 m6 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    9 v  u0 |8 s. k/ k3 h1 l[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)! p" w+ z! w: S6 D9 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        {* u. W1 c: ^$ V7 Z0 B  I
    [color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;/ R& H/ P/ O; y% j; J
    [color=rgba(0, 0, 0, 0.749019607843137)]        }  D, R2 W- w5 E+ U5 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)9 t/ j, d! R8 h2 E) E) A  w
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    ; {6 n* H% `7 n/ R0 h9 M# K[color=rgba(0, 0, 0, 0.749019607843137)]                return root;
    ) p  N3 T! j& \! u/ q[color=rgba(0, 0, 0, 0.749019607843137)]        }
    , [1 q3 A( ?) Y" \( b[color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树3 u3 e: T2 G0 b9 {
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);
    1 A* ]# ?+ T) T1 ~& T; U[color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)
    8 s# k7 B3 l2 Q( e; g2 w[color=rgba(0, 0, 0, 0.749019607843137)]                return lret;
    % R0 a- U$ n, l) ?5 R* l[color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树) e6 L" v. k9 {7 C4 s) i
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);
    # v8 L4 I; z% L' B5 ?3 C. t( J[color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)% C; i/ X3 D4 B: U! }$ ~4 g
    [color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    8 r# H5 H0 s% \; n6 M6 D3 P3 s0 V[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;
    6 v4 }9 b) s# b+ R9 l[color=rgba(0, 0, 0, 0.749019607843137)]}, n( D- [6 T6 X/ n
    [color=rgba(0, 0, 0, 0.749019607843137)]————————————————# _- D+ u; p3 F" i" C1 l/ B
    [color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    % ~5 h( E3 x% N6 X+ J' Z+ [[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212# H. `' N3 _3 \' U' p

    ; d; [3 _0 K% O2 b  i, p" y7 \. M, Q- X/ p7 W, H& b/ i1 x0 I
    [color=rgba(0, 0, 0, 0.75)]- {/ {" P! a- W' Y
    3 d/ S: z' `5 b' @' ~! J+ {
    6 p0 J8 n# F. F3 V  ~" R

    - G% z% ?, d  R3 ?
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-11 20:53 , Processed in 0.465338 second(s), 51 queries .

    回顶部