QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2479|回复: 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
    【数据结构】二叉树的遍历:前序,中序,后序的递归结构遍历
    , N7 Z4 W  P; v4 y' Y/ h' j7 H
    % C+ r8 h3 \$ |[color=rgba(0, 0, 0, 0.749019607843137)]文章目录
    % l% Z$ u/ F5 |% N8 m/ L[color=rgba(0, 0, 0, 0.749019607843137)]前言" @' a. u' i$ I5 |+ `2 F! L# j
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式) d2 @: b( ?: ]; S( r! B
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)) U# }, ^# k- [5 P5 J& R
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历+ Z: Y1 F1 @$ m
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
      a/ }/ S% @* `2 R[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    ) E) {: c2 b) I2 W/ d5 `/ A[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度3 m; e/ [2 @3 A6 M
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    4 u4 S1 ]0 A9 n: K[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找7 U3 @7 x3 h  p2 b
    [color=rgba(0, 0, 0, 0.749019607843137)]前言, e/ _2 m+ w, s; N9 O2 e' N; K* N
    [color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。
    ' L( c! u: i2 M1 g5 L: \[color=rgba(0, 0, 0, 0.749019607843137)]( T& z2 b* S) T

    5 w1 C, U- {0 ~8 E3 y4 h[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式0 e9 c' j/ e  M4 T: T
    [color=rgba(0, 0, 0, 0.749019607843137)]3 Z: I& e# |: R5 }

    2 I4 |( ^7 u' m+ g[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:
    ; J# U% F- H2 @' `+ p8 B[color=rgba(0, 0, 0, 0.749019607843137)]9 f. e; v9 w1 K* y( i- K: Z7 c

    * Z' s8 z6 b$ S4 Y$ r. J[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树& [, Z! Y6 E  o
    [color=rgba(0, 0, 0, 0.749019607843137)]
    9 T6 Y* j; U5 H5 ^% r3 B
    + k( R+ K+ M  g. R, l
    [color=rgba(0, 0, 0, 0.749019607843137)]
    / b! j# k" \  H, ~, J9 z- R
    5 \$ H' E0 b- J" m: Q; Q+ b' s, a
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树5 `3 u$ @8 v2 R1 }6 J$ s; r9 f
    [color=rgba(0, 0, 0, 0.749019607843137)]  J. ]5 l0 I2 U* b: R1 q2 D

    : \& l: h7 P/ [& N8 i( H8 ~3 J[color=rgba(0, 0, 0, 0.749019607843137)]8 `( E. r7 ?; s3 [1 ], i" m
    ; ~6 \; H3 B/ Y2 H0 i" X
    [color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根6 T! u  G( x, \( F0 R
    [color=rgba(0, 0, 0, 0.749019607843137)]" J  Q( b# W: K; d. t. q' R6 ?

    8 [7 K* f$ _% s0 {[color=rgba(0, 0, 0, 0.749019607843137)]
    ; K& l0 Z/ Q1 e. \5 C' \
    $ f2 Z5 V3 G! O" o* S, ]! [- G
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)$ t. y& F5 O3 M9 L- t6 L: @
    [color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之
    + e% B9 ~% ]/ ~: s5 z[color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;1 h) ^) \1 k8 x' ]" a$ \6 w
    [color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;0 I% |  i# N/ t  Y9 X) e
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);/ q; R, q1 ^$ a
    [color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);; m. q% w- B( \2 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);
    9 k* P- I. y. r[color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);
    / J- h$ y( f: |[color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。
    8 B) Q& n) T5 a1 y1 F[color=rgba(0, 0, 0, 0.749019607843137)]# e0 K8 Z* l* H% [
    1 H+ Z5 v( `2 k5 q
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    , R. ^( |7 z& Z4 [0 ]4 U[color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 16 j% g9 Q+ l' a* _1 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>
    # ]) z) ~3 L8 n3 K1 g2 V[color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>
    ! n+ \! i. y2 v$ B+ Q[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>
    5 Y9 Y, @2 n- ~. d[color=rgba(0, 0, 0, 0.749019607843137)]% R6 y& n' r# r- J  X! }

    " V  N* X- `6 H0 B; t[color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;* c; k  m% y4 m0 T: @/ K( [" {% e
    [color=rgba(0, 0, 0, 0.749019607843137)]& D( w1 k) {% D( ]8 h

    # \+ J% F' p# v6 n* v[color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体$ _5 O4 X9 e# m) J
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode. @; P: O$ D! {
    [color=rgba(0, 0, 0, 0.749019607843137)]{
    " |6 u5 G8 C, d; h2 w[color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;
    / N- ]* Z6 p2 e9 W1 z[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;
    9 P0 N- d) V/ V' E[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;
    & u% g2 `% x( @& q[color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;8 t. e+ j! p  v2 d, n/ d0 k, A
    [color=rgba(0, 0, 0, 0.749019607843137)]
    2 g7 U& t( x/ g3 ~6 ^
    6 a/ R7 H1 ^& n( t% R7 `2 i  x5 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历
    5 l9 O( e$ @5 w- U/ t[color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    ) h7 T  {- `% {[color=rgba(0, 0, 0, 0.749019607843137)]{5 J+ }' d! i# m: q8 C* Q! q
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    8 S( @# b$ y% Z[color=rgba(0, 0, 0, 0.749019607843137)]        {
    7 @" P8 I, O: ~- ]7 \, e[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    6 C9 z6 b* E! X[color=rgba(0, 0, 0, 0.749019607843137)]                return;
    0 E7 t6 N/ z% E, _" K5 ^' A[color=rgba(0, 0, 0, 0.749019607843137)]        }* u# ?$ e, k$ @9 ]3 l) s4 k. c
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    4 G7 R# W6 W5 k% x% X[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);
    1 ]4 J# r  H1 n7 Z. M4 k" r" f[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);4 w: S! I! i1 {8 q
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    1 C( S& B, }7 C$ \  E4 O[color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历( G; c/ K; b" i3 {" M) @2 m
    [color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)" N/ F1 v: K* _( J5 L8 T0 O
    [color=rgba(0, 0, 0, 0.749019607843137)]{. I- ]* I9 u& g5 w2 I3 L% c
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)! U/ K: O+ N" l  T
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    - N5 W: Q7 h5 p/ a+ Z, b- l; z7 u( `; ]( [[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    # [  i& v6 @% t. n0 _[color=rgba(0, 0, 0, 0.749019607843137)]                return;) A, Z* b6 H0 q* w5 @0 `
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    6 C2 e4 j4 n- U; Q% E[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);$ C- y7 ^# P% A% p) j0 a1 z
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    / B' _" J, O( q; v$ x[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);7 }- h' f$ ^' x! v' `/ m8 \# f
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    2 B9 B' H2 j) T1 Y[color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历9 ]! S$ ^0 I- }
    [color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)* p3 R7 ]; X% e6 s+ o
    [color=rgba(0, 0, 0, 0.749019607843137)]{8 |% p1 _. T4 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    ; }$ |2 D7 F3 v3 {[color=rgba(0, 0, 0, 0.749019607843137)]        {
    & Z1 p, B* ]$ V' W6 \8 Y[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");" H4 @, ?; I9 ~$ V" \& M
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;$ K  y, N/ d) ^& M$ C" t: R6 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    5 `4 q! d) M' p8 W$ v[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);
    7 I0 T% p1 p* u9 W; X: p; x[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    - V, C2 w3 U$ y[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    $ Z/ \) X# c+ \$ n2 X+ C[color=rgba(0, 0, 0, 0.749019607843137)]}% D4 B$ [3 I* \; k# {' F  K" Y6 H
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    8 Z/ _% `3 o. R2 ]3 q[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()
    3 V7 Q0 k. y6 H9 d[color=rgba(0, 0, 0, 0.749019607843137)]{
    ! [" [$ b3 K0 O$ r[color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间
    3 X: N# m/ b; A+ }0 V[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));
    : x1 K, g+ h% ?* w( k% r/ E[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);
    8 _; r' m; n2 O2 P4 W+ G[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));
    ' P  d+ v1 r' M[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);6 Y9 C! U$ d: E+ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));
    " `. X, @6 `, @/ j& f, y[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);6 u6 I' t4 l' E) \* w% N3 q# ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));3 O6 e& T8 x7 i
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);
    + Q9 j& z- {0 v5 w2 n[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));
    5 P% q2 d5 n  u& t! ]* D) `* b' }, v/ m6 {[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);9 I0 w; T- h! ~! s# C+ g
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));
    ( ]0 f5 m1 `& d# P4 o8 a# O  s[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);' N& M9 N+ W5 `9 `3 B) u7 c
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ) i  |/ c, N! k8 ^; x* O- A
    ; Q8 ~. z' F+ @7 N& f
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;  C# `  U+ C, m5 {. V$ G0 n0 Z  x
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;! a# O2 u& _" [, g! t9 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;
    8 H8 e7 j6 M% ]2 E8 C( ?[color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;' d. m/ ]+ C5 a' m0 o1 G& q, @0 T
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;# Z3 W' R* y+ B; K, [' X  u9 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;
    " P% x2 g0 O; U, G7 f[color=rgba(0, 0, 0, 0.749019607843137)]
    # \/ n' a! F0 w2 i

    2 v# z3 f# M1 t+ v2 z! C- o- s% ^[color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;" t& Q) W# \3 {) J: R
    [color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;6 U9 [" F  p9 W5 v4 F5 X! h
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;
    6 _+ K3 z4 v+ @% m[color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;
    " Z( [6 Q5 [8 [, s" P- G; d[color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;
    % ~! `5 C3 |3 q  h[color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;
    . L( K  t, ?) Z8 y3 I3 ^[color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;
    + c3 z$ x/ ~" R2 w$ J; G[color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;
    4 k! W2 w6 H/ m! O" C[color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;. J9 Z& N0 V* n/ G1 Y% X$ a8 M
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;, a2 D9 X/ ^8 b: O1 G
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;
    # M& o; e0 s  e9 x& c6 T[color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;
    " L' M4 z( }+ C/ R" G1 i1 s[color=rgba(0, 0, 0, 0.749019607843137)]
    ( T2 K2 K' E1 n7 a! |+ F
    8 u+ ~7 ?! A. v# D
    [color=rgba(0, 0, 0, 0.749019607843137)]        return n1;% C) S+ i2 G; Z  F+ }
    [color=rgba(0, 0, 0, 0.749019607843137)]}1 l4 J% m6 n6 g6 g: V7 m- [
    [color=rgba(0, 0, 0, 0.749019607843137)]
    8 W9 S) W6 \& x' a$ u: L( ^

    + L/ `+ o# e6 s. l7 R; L& T$ r[color=rgba(0, 0, 0, 0.749019607843137)]int main()3 r/ F/ V$ h0 Q& R: W. C
    [color=rgba(0, 0, 0, 0.749019607843137)]{0 j9 F5 W9 W3 V
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
    % s- l4 C! Y* t' `5 i/ l# b2 V+ P[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();& s6 q. v0 F: `& |
    [color=rgba(0, 0, 0, 0.749019607843137)]
    4 S2 j- `  Z! c# x8 e$ B
    - L7 L1 G; T" f, ?7 k2 [8 y
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    8 V+ |/ `* e3 a; C( m[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");
    & z( z! w) K# C7 @) t7 u$ r& E[color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    + L8 x. G: @, T+ {[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");: w8 I7 k- L# u0 t
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历
    8 [: @. N- q+ C0 X3 A" R% R$ N[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");5 P9 ]3 t; M1 @' B+ C& I( y: `
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    8 ~( q: \/ ]& r8 k0 n[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");* Y. S: |8 v) F4 p$ |7 H
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历
    0 u- X8 t- u* v" ^4 _9 Y& k: C[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");
    - \8 {/ H! O8 P1 _* J[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);
    5 {! m! F( ]( d' w[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    % H' c- }& w, J% y. A' o[color=rgba(0, 0, 0, 0.749019607843137)]
    ' [& F5 K/ w! G& n  x2 n5 T

    8 a+ N$ k( I9 B[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;6 t# G" y( @4 R0 C, q; p
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    # ]0 |3 r  r" C$ Z  Q& k- b[color=rgba(0, 0, 0, 0.749019607843137)]16 v! `# y7 J. G
    [color=rgba(0, 0, 0, 0.749019607843137)]2
    : G, \# ?% t' d9 v1 k( q" S[color=rgba(0, 0, 0, 0.749019607843137)]3/ u/ A- r: C8 |- `, M
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    & G2 v. u4 r& x* J6 i* e[color=rgba(0, 0, 0, 0.749019607843137)]5
    " |$ Q  q9 q6 j/ ?[color=rgba(0, 0, 0, 0.749019607843137)]60 u# x7 d  ]# W$ e' z. o8 b' W
    [color=rgba(0, 0, 0, 0.749019607843137)]7* v6 l; K& _% z% S  G
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    ; r' A# g5 a) b3 F1 ^5 r4 Y7 e- ][color=rgba(0, 0, 0, 0.749019607843137)]9
    % q2 M" g' z; G0 O% N5 x: D" T[color=rgba(0, 0, 0, 0.749019607843137)]10
    2 K, z+ M, ]0 g' D# K) K: x[color=rgba(0, 0, 0, 0.749019607843137)]11
    7 A9 i, a8 S) ?' N[color=rgba(0, 0, 0, 0.749019607843137)]12
    % K' j: a# J3 o  D[color=rgba(0, 0, 0, 0.749019607843137)]13# X  I9 u) G& a2 o* M
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    3 Z( `  H; e7 m7 i1 {& f- E[color=rgba(0, 0, 0, 0.749019607843137)]15
    + _  u! O* ~; l) P, s[color=rgba(0, 0, 0, 0.749019607843137)]16
    + f% K' F# G  G[color=rgba(0, 0, 0, 0.749019607843137)]17
    ' e1 v* s& j, c/ {; e[color=rgba(0, 0, 0, 0.749019607843137)]189 V) C8 {" j; I0 z1 j  E2 t
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    # o7 g& Z* C/ F6 D+ p5 |/ }' P[color=rgba(0, 0, 0, 0.749019607843137)]20
    % U  k" }4 U$ ?% o[color=rgba(0, 0, 0, 0.749019607843137)]21- O4 s/ S: O1 e+ ]
    [color=rgba(0, 0, 0, 0.749019607843137)]22: k9 m. \% a: W5 s4 e# |! R4 r  `
    [color=rgba(0, 0, 0, 0.749019607843137)]235 \" X  S  d. F
    [color=rgba(0, 0, 0, 0.749019607843137)]24) e4 V  s  g6 c/ T* K1 ?) h3 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]253 p% ~! [& V/ w! g5 C0 r; f
    [color=rgba(0, 0, 0, 0.749019607843137)]26
    % P0 |' j' c' D% s! a* n4 c% c1 @[color=rgba(0, 0, 0, 0.749019607843137)]27) o' F( u: w# `5 G
    [color=rgba(0, 0, 0, 0.749019607843137)]28! y' G! S% d% E
    [color=rgba(0, 0, 0, 0.749019607843137)]29! I9 m' N1 o1 I" R) G' p6 T
    [color=rgba(0, 0, 0, 0.749019607843137)]30/ d" _, O+ w! E# ~1 r, f; H
    [color=rgba(0, 0, 0, 0.749019607843137)]31+ [+ Q! |- H1 U2 b, @( W  v  q
    [color=rgba(0, 0, 0, 0.749019607843137)]32$ F1 J7 w3 R9 p& H7 U& z
    [color=rgba(0, 0, 0, 0.749019607843137)]33% @9 F- X+ B7 `! z% t, C
    [color=rgba(0, 0, 0, 0.749019607843137)]349 W6 V5 M; ~# e9 ^$ }4 A  o* N
    [color=rgba(0, 0, 0, 0.749019607843137)]359 T' v1 y5 B4 D2 D9 V& W! I
    [color=rgba(0, 0, 0, 0.749019607843137)]36
    . V* e9 ?% V7 w3 F1 R[color=rgba(0, 0, 0, 0.749019607843137)]374 H* H# w; u" l
    [color=rgba(0, 0, 0, 0.749019607843137)]384 [$ k, m: M( D+ q7 q# P2 f* Q
    [color=rgba(0, 0, 0, 0.749019607843137)]392 D4 C% y& l$ _/ b3 u5 M
    [color=rgba(0, 0, 0, 0.749019607843137)]40# J1 j  Y( m, \) v8 f
    [color=rgba(0, 0, 0, 0.749019607843137)]41
    / B& d3 F( R6 p4 l% `9 Z; H[color=rgba(0, 0, 0, 0.749019607843137)]42: H! M1 f1 I' x
    [color=rgba(0, 0, 0, 0.749019607843137)]43: p0 q! b8 y% d9 z# i
    [color=rgba(0, 0, 0, 0.749019607843137)]44
    * Q; U: }1 A$ J+ N, x" b[color=rgba(0, 0, 0, 0.749019607843137)]452 F9 o6 s; Y$ [7 H
    [color=rgba(0, 0, 0, 0.749019607843137)]46
    " f* L! u1 h4 M" @3 D[color=rgba(0, 0, 0, 0.749019607843137)]47
    3 @. B- J0 w6 s/ N+ c9 F' `; U[color=rgba(0, 0, 0, 0.749019607843137)]480 L7 F' g, N3 A/ e6 C( T3 M
    [color=rgba(0, 0, 0, 0.749019607843137)]49$ l( R  I: D- G- g  b) @, M) W
    [color=rgba(0, 0, 0, 0.749019607843137)]50/ v5 c* J% `' K, f4 c2 W# D& c
    [color=rgba(0, 0, 0, 0.749019607843137)]51
    % `1 W* s* m! E0 N[color=rgba(0, 0, 0, 0.749019607843137)]52
    ; u4 {* U( p, S3 ^+ T. H1 h[color=rgba(0, 0, 0, 0.749019607843137)]53
    4 {5 `) ?* s- ~( @/ [[color=rgba(0, 0, 0, 0.749019607843137)]54. B  @0 Y1 T3 L( t$ B( d" C
    [color=rgba(0, 0, 0, 0.749019607843137)]55
    * \( f$ P4 s- y8 S/ h1 i, x[color=rgba(0, 0, 0, 0.749019607843137)]56$ J2 X, q/ t* g% g0 E+ l* k
    [color=rgba(0, 0, 0, 0.749019607843137)]575 k0 X$ K9 @: h5 V( y
    [color=rgba(0, 0, 0, 0.749019607843137)]58
    - c7 u- D& r/ ~8 x5 w; C! o[color=rgba(0, 0, 0, 0.749019607843137)]59
    , E3 e" ^6 ]  B8 K[color=rgba(0, 0, 0, 0.749019607843137)]60
    , @! T. e# ^/ g; V/ ~( O[color=rgba(0, 0, 0, 0.749019607843137)]61
    0 E% h4 H! O/ [[color=rgba(0, 0, 0, 0.749019607843137)]62
    $ k5 e6 Z! F1 Z- D! f[color=rgba(0, 0, 0, 0.749019607843137)]63
    + |! ^- v' x% @- m[color=rgba(0, 0, 0, 0.749019607843137)]64) m+ W& }) ]$ W% q) s1 V
    [color=rgba(0, 0, 0, 0.749019607843137)]650 l( r8 O: Q9 b8 B) ?
    [color=rgba(0, 0, 0, 0.749019607843137)]66
    " h: ~8 }) ?  M$ M[color=rgba(0, 0, 0, 0.749019607843137)]67" Q6 k! C* E9 n8 o
    [color=rgba(0, 0, 0, 0.749019607843137)]680 s  a" A( Z9 o7 j$ J0 K
    [color=rgba(0, 0, 0, 0.749019607843137)]69. V1 `) ~0 u# J4 H: f2 i$ y
    [color=rgba(0, 0, 0, 0.749019607843137)]70/ g$ @+ ]; |) g; m
    [color=rgba(0, 0, 0, 0.749019607843137)]71- i& N! y- }3 ~. _4 E4 \& J$ }$ ~
    [color=rgba(0, 0, 0, 0.749019607843137)]72
    & h$ l# C9 Y- b4 t$ n  w: a+ E) c[color=rgba(0, 0, 0, 0.749019607843137)]73! r% [( B& c9 o( Z$ o
    [color=rgba(0, 0, 0, 0.749019607843137)]74% ]; ?4 I/ ^8 w1 p
    [color=rgba(0, 0, 0, 0.749019607843137)]75
    , T. E0 P  u9 k! I9 c3 e2 b) h1 [[color=rgba(0, 0, 0, 0.749019607843137)]76$ ^+ c) _$ e6 n* D# m3 _8 H
    [color=rgba(0, 0, 0, 0.749019607843137)]77  m' e2 s) U, Y' I
    [color=rgba(0, 0, 0, 0.749019607843137)]78
    : O' o. y% Y0 L- g: K0 D* c[color=rgba(0, 0, 0, 0.749019607843137)]79
    6 G: J9 H8 x3 l" }1 K$ \[color=rgba(0, 0, 0, 0.749019607843137)]80/ M, V  G8 z' C, v* \; D1 o
    [color=rgba(0, 0, 0, 0.749019607843137)]81% b3 d- ?) x& A5 P, W4 X: D; k
    [color=rgba(0, 0, 0, 0.749019607843137)]823 y( x6 u* a) \' A
    [color=rgba(0, 0, 0, 0.749019607843137)]837 I" J' m, f0 ]8 w  R5 l% P9 l
    [color=rgba(0, 0, 0, 0.749019607843137)]846 G. i3 t! v+ {  G8 O) i5 _
    [color=rgba(0, 0, 0, 0.749019607843137)]85) X2 w( ~$ x  J
    [color=rgba(0, 0, 0, 0.749019607843137)]86, _  @4 }7 B) I0 }1 p. q
    [color=rgba(0, 0, 0, 0.749019607843137)]87- e; P: C3 ]1 e7 E4 a
    [color=rgba(0, 0, 0, 0.749019607843137)]88, W, ?2 ?* _- G' N* i
    [color=rgba(0, 0, 0, 0.749019607843137)]89& R3 \# Y* P" t+ T. q. |& E  x
    [color=rgba(0, 0, 0, 0.749019607843137)]90
    5 m# i6 V; j8 S' Q' M4 f6 }[color=rgba(0, 0, 0, 0.749019607843137)]91  E" g% N* c+ t
    [color=rgba(0, 0, 0, 0.749019607843137)]92) a% q, b1 M7 M+ v
    [color=rgba(0, 0, 0, 0.749019607843137)]93
    3 C! i% X3 C" r[color=rgba(0, 0, 0, 0.749019607843137)]94
    ! D; d* r/ u* d7 O/ A* z! I[color=rgba(0, 0, 0, 0.749019607843137)]95
    2 \) ~# h3 l/ Q, B3 V# o( [[color=rgba(0, 0, 0, 0.749019607843137)]96. ^# n+ D+ y6 p. K0 R( w+ E+ {0 j
    [color=rgba(0, 0, 0, 0.749019607843137)]971 }* ?0 v) [+ L) N
    [color=rgba(0, 0, 0, 0.749019607843137)]98. W  e2 D5 D1 X2 M0 E# D1 s( L
    [color=rgba(0, 0, 0, 0.749019607843137)]99) _4 Z. m. G/ n! G- |0 i
    [color=rgba(0, 0, 0, 0.749019607843137)]100
    9 l# l( A& [6 ~# k% k8 `# I[color=rgba(0, 0, 0, 0.749019607843137)]101. f3 E& o8 _( \* E3 u/ I
    [color=rgba(0, 0, 0, 0.749019607843137)]102/ B$ }, g; ?% |' _8 a5 z& {* y0 k$ E4 [
    [color=rgba(0, 0, 0, 0.749019607843137)]1034 l  E2 o  [# c  `8 O4 O% L
    [color=rgba(0, 0, 0, 0.749019607843137)]104
    0 o. I7 a3 f" g. p2 y[color=rgba(0, 0, 0, 0.749019607843137)]105
    & g3 _+ L0 }2 d' ^[color=rgba(0, 0, 0, 0.749019607843137)]1061 C8 ?+ l7 S9 L1 \* D: O) H" Y+ b
    [color=rgba(0, 0, 0, 0.749019607843137)]107
    ! @. M$ q  h4 [2 k3 P) A; ^0 `/ u[color=rgba(0, 0, 0, 0.749019607843137)]108: A$ f5 m6 I# C, t+ L5 d/ c
    [color=rgba(0, 0, 0, 0.749019607843137)]1099 h& Q& T$ X4 q, V4 r4 T
    [color=rgba(0, 0, 0, 0.749019607843137)]110% T" C" G$ P: k
    [color=rgba(0, 0, 0, 0.749019607843137)]111
    ; K1 ~5 X; c5 v& T( d[color=rgba(0, 0, 0, 0.749019607843137)]测试结果:1 v. d# y+ \$ Z. [: y% J( p
    [color=rgba(0, 0, 0, 0.749019607843137)]& Y. O/ z! ~% e% X/ }9 A1 |

    7 n2 J2 l, @5 S9 K1 N4 L8 Y[color=rgba(0, 0, 0, 0.749019607843137)]
    4 X' I. ]+ {; x7 t4 ]* A* m3 j

    3 O& Z3 f* L& U' u! S* T[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小4 j, x- m9 D% P: A. O; y* s
    [color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)# X+ w# K# v' X# W. B3 O
    [color=rgba(0, 0, 0, 0.749019607843137)]
    1 J$ j. W: x) e: ]
    4 u1 d5 `  P8 E6 x! _' U" ~
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小
    - t! B* ^! O8 i9 F( C* u1 `[color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量
    5 K4 p) F7 r9 F$ v7 ~[color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;
    5 h6 p1 Q- i" q. z) M0 d% I  L, y3 k[color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)
    - o. J7 A  @3 I0 t; i[color=rgba(0, 0, 0, 0.749019607843137)]//{
    6 E( p5 }1 o: W* N[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)3 b$ g5 Q; s! y( R/ H7 S, r+ _
    [color=rgba(0, 0, 0, 0.749019607843137)]//        {
    ) h) F' Q  \$ B5 k[color=rgba(0, 0, 0, 0.749019607843137)]//                return;
    9 p- E% F% \/ f4 x5 ?/ l0 E  h+ ~[color=rgba(0, 0, 0, 0.749019607843137)]//        }
    ) U; w/ Y, [- p" t# q' l[color=rgba(0, 0, 0, 0.749019607843137)]//        count++;: [/ g2 v6 ]( l; C
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);% g0 Q8 w0 d1 N* k; [$ t5 G' @
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);
    + I% F! x* Q8 G& F; T[color=rgba(0, 0, 0, 0.749019607843137)]//* ]! C; @/ W) N
    [color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量5 Y) w% j4 {) |2 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]//}" G* h' A5 M* ]
    [color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之5 Z) T8 N, t, Y0 T* T/ k; o) {) C# p
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)5 i5 F; y! X) k9 o' Q7 [
    [color=rgba(0, 0, 0, 0.749019607843137)]{- b- h2 V/ m# V5 h. M, h+ \/ }
    [color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;2 m8 ?3 Z) j2 D6 R0 D6 J/ o' ?0 L
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    , g- V& d. d/ ^1 d1 K% V  r3 z[color=rgba(0, 0, 0, 0.749019607843137)]1
    & l4 t( m/ A- f* t& u3 D[color=rgba(0, 0, 0, 0.749019607843137)]2
    0 X, R6 G/ G6 t[color=rgba(0, 0, 0, 0.749019607843137)]3
    6 H2 x" L/ A$ z: u- r9 T9 l5 J[color=rgba(0, 0, 0, 0.749019607843137)]45 w" ^' d8 g& ?- ]% A5 T7 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    , j* Y0 X' Z& y. V% S9 C% m+ g[color=rgba(0, 0, 0, 0.749019607843137)]6
    : Q# C! }8 i1 o[color=rgba(0, 0, 0, 0.749019607843137)]7  @, I5 }2 m0 [# b7 z$ R1 R$ T* u
    [color=rgba(0, 0, 0, 0.749019607843137)]87 [+ s4 R0 n. o' f- `7 i
    [color=rgba(0, 0, 0, 0.749019607843137)]95 s$ d/ Z3 S  l8 s8 I* z: j' t
    [color=rgba(0, 0, 0, 0.749019607843137)]106 Q) d% K: ~( i; e( t
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    & r$ o" |# c- Y  B) U3 `[color=rgba(0, 0, 0, 0.749019607843137)]12; Y- X' N4 \5 h# t8 ^- O
    [color=rgba(0, 0, 0, 0.749019607843137)]134 g4 P" h# w1 ?3 g* T
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    " _3 A7 Y% _; [9 v/ a0 B5 t. f[color=rgba(0, 0, 0, 0.749019607843137)]15
    $ H. |# B7 Y+ j" N/ O/ Q[color=rgba(0, 0, 0, 0.749019607843137)]161 [; z( W2 g- v
    [color=rgba(0, 0, 0, 0.749019607843137)]17; v1 u! b: I0 L7 ]: b# j# u
    [color=rgba(0, 0, 0, 0.749019607843137)]18, X' \8 Y( f2 O. m! k
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    4 E: U1 i$ x. @. L0 f0 }7 L[color=rgba(0, 0, 0, 0.749019607843137)]20
    . ^" e2 Y3 y1 Z- J1 g4 {[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数5 r0 q6 X( z$ q% Y" x. ]; n
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数) q6 ^6 U- y3 ]$ i( |
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)
    ! p! }% B' r6 [" a! Q[color=rgba(0, 0, 0, 0.749019607843137)]{" ]$ p  E  U/ _9 U: P: `: |( ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点1 X! ?3 c' O9 R: J1 S
    [color=rgba(0, 0, 0, 0.749019607843137)]        {; l7 S* G6 r2 c, N8 h
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;, }. K8 r6 e/ {. v# t5 d3 H! \
    [color=rgba(0, 0, 0, 0.749019607843137)]        }3 s9 ]2 _, |. P, F0 U0 c
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空
    4 E/ q- f  h2 g( }% W& t& D[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)' q* z2 ]4 j) S! U; e1 p& ^: a. i
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
      ~, r/ v4 l5 c3 m# g[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    ' `9 P7 H3 b! q- a4 F[color=rgba(0, 0, 0, 0.749019607843137)]        }
    ; I% |8 n4 @' v[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);
    : U$ \6 ]$ U" e( z  o) ^[color=rgba(0, 0, 0, 0.749019607843137)]}7 t/ K4 S; e$ N- R9 D1 t
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    6 L6 e+ Z: N  g8 ^% q# M/ w) n7 n! i[color=rgba(0, 0, 0, 0.749019607843137)]2  k) w6 e0 t9 G2 N
    [color=rgba(0, 0, 0, 0.749019607843137)]39 x3 ]- c  R/ w1 i, N$ S
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    " G+ \% ]9 v! e[color=rgba(0, 0, 0, 0.749019607843137)]5
    9 m; P4 |! Y$ M1 O5 Z1 w  p[color=rgba(0, 0, 0, 0.749019607843137)]6; f$ }# o$ H/ p7 F: N# y
    [color=rgba(0, 0, 0, 0.749019607843137)]71 w. C7 e8 M) C# m: Q3 V9 e
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    & f0 N# X" G" E7 h* O! p  R[color=rgba(0, 0, 0, 0.749019607843137)]92 l7 J7 l( K2 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]104 z4 N: K9 k" {/ M& x1 E
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    " Y& R  B5 F8 a: `4 s[color=rgba(0, 0, 0, 0.749019607843137)]12
    * W$ O4 Y9 M. A" g[color=rgba(0, 0, 0, 0.749019607843137)]13
    7 s" n% e; i' A% y) N[color=rgba(0, 0, 0, 0.749019607843137)]14
    / [) r, {# F+ T, Q4 M[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    " C6 |; C' Q# T1 ^( k1 X[color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)
    7 z) E+ p; I5 C& s: ~5 J4 {/ V9 W[color=rgba(0, 0, 0, 0.749019607843137)]{, F# E) E0 r/ C" K
    [color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为04 b. U4 o/ g: X
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    $ N6 m; u% v- t& U$ i[color=rgba(0, 0, 0, 0.749019607843137)]        {- g0 B- W* j1 j
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
      V, ~. w- X3 i- j9 ^- o[color=rgba(0, 0, 0, 0.749019607843137)]        }
    1 p8 ?$ H8 ^0 {; d) T0 O& |! B[color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树+ d6 |. d. f5 ~2 L  _4 R/ H
    [color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度
    % z0 E2 G& F4 e/ R1 S, e. X[color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度6 b1 |' K  N( O
    [color=rgba(0, 0, 0, 0.749019607843137)]2 i8 ?- e4 t1 W3 f7 o8 [* N6 X

    # ]- t% D6 U/ }8 t$ `- q[color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;
    - j5 k& H8 T" a; p[color=rgba(0, 0, 0, 0.749019607843137)]}
    : _' t% Z" ?# E: {( o1 H# ]- `[color=rgba(0, 0, 0, 0.749019607843137)]1
    & c* h& g0 J& Y* X9 Y  w[color=rgba(0, 0, 0, 0.749019607843137)]2# L7 @/ N  V4 \
    [color=rgba(0, 0, 0, 0.749019607843137)]3$ {, n% r8 {* j" U8 E
    [color=rgba(0, 0, 0, 0.749019607843137)]4  N( l) R7 V, R- h, d+ d
    [color=rgba(0, 0, 0, 0.749019607843137)]55 n, Q6 G; V9 `. M3 T2 g
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    " ^3 `$ {; L  i  b# }$ j6 m" a[color=rgba(0, 0, 0, 0.749019607843137)]7; M" ~: [0 z1 P
    [color=rgba(0, 0, 0, 0.749019607843137)]8" H* `5 N0 \% d( {, {4 o1 n
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    - V4 C  s8 j  X' v- Z. c$ F[color=rgba(0, 0, 0, 0.749019607843137)]101 K  X. g% E" l* n# ?8 M2 @8 `
    [color=rgba(0, 0, 0, 0.749019607843137)]113 o1 l- [$ ]% c' L9 \4 C: u, P
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    $ T( N* W$ ]& J3 W2 x[color=rgba(0, 0, 0, 0.749019607843137)]13* x# H% @5 E% h( R
    [color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    3 S! D; L5 U: c7 F) P[color=rgba(0, 0, 0, 0.749019607843137)]
    3 M' [, x$ L$ R! i' q
    4 s% U* Z* a, w$ }) h
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ( e+ T, a* M  ]/ o) E
    $ |* E6 C, B- X/ n9 K7 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。/ s1 H5 D+ [! C% N% t8 z
    [color=rgba(0, 0, 0, 0.749019607843137)]
    $ e) S3 P; i0 q9 U0 H
    4 {& G5 [. D5 @9 r3 H+ C9 O/ m) a: r
    [color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数- }7 V2 L& N6 R5 V
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)
    9 m! d0 k# A/ P8 h% {& f4 k2 D[color=rgba(0, 0, 0, 0.749019607843137)]{
    / d6 ?8 B- r! U& y6 N[color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);4 ]" B& W+ G# f# E/ }
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    3 V( x5 c5 w- H+ `4 G( p0 s[color=rgba(0, 0, 0, 0.749019607843137)]        {3 L) S' Q: E) ~! h$ h1 ?7 b' L" g
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    7 _% `$ F6 x, c$ |% u[color=rgba(0, 0, 0, 0.749019607843137)]        }
    1 A& A7 x0 u9 F# s$ D4 S8 b9 A[color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)
    6 B, u- Q# o% i# z6 |[color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)
    . q7 Q6 @/ u) {5 D, f: t( c[color=rgba(0, 0, 0, 0.749019607843137)]        {
    0 N% H- G' @& j1 R8 B# O[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    1 }8 Y" s( l$ w5 f% f  ~" C[color=rgba(0, 0, 0, 0.749019607843137)]        }
    # j+ E5 p, F( B( N! x[color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层  g1 y/ Z$ ?9 }! j/ C0 P
    [color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);
    / U0 g+ G% ^5 X3 T& n+ T[color=rgba(0, 0, 0, 0.749019607843137)]}. d& ~% C8 F9 d$ o6 c
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    9 _3 u$ k0 D% p[color=rgba(0, 0, 0, 0.749019607843137)]25 S0 a0 e7 P2 F+ |7 |
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    $ l& V4 y0 Y& K) W[color=rgba(0, 0, 0, 0.749019607843137)]4# Z: T% L8 ]3 b0 E* H
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    $ `% Q3 X2 e" ~/ N[color=rgba(0, 0, 0, 0.749019607843137)]6
      N6 E  S! o: W) C$ i[color=rgba(0, 0, 0, 0.749019607843137)]77 V, `, V# H+ x; }' |8 a, \) p  w
    [color=rgba(0, 0, 0, 0.749019607843137)]8# X, _' P7 o0 B4 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]9  `" R5 Y* A2 i1 h4 t  ]: Z6 F
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    1 |+ ?( ~) m6 {: j! m" N7 R[color=rgba(0, 0, 0, 0.749019607843137)]11
    & H8 m8 _1 e; ]& c( u. I) y[color=rgba(0, 0, 0, 0.749019607843137)]12, T  s' k) i3 }/ @4 F
    [color=rgba(0, 0, 0, 0.749019607843137)]136 w2 K3 Z- `; S5 M0 b' S8 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]14
    1 m3 `1 l; ?0 E- K- r5 w[color=rgba(0, 0, 0, 0.749019607843137)]155 T' Z, K$ Q# j  Z
    [color=rgba(0, 0, 0, 0.749019607843137)]161 z" }4 Y  r" i& B
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找, \! e% r$ l3 N5 w$ R
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找' ?& ~# `* a: m7 I
    [color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    - b* A% }' A9 ?) w0 W[color=rgba(0, 0, 0, 0.749019607843137)]{8 `. P% n3 D, i3 U
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)% n4 W8 t/ w2 N1 m/ t! c, B4 a! M+ s
    [color=rgba(0, 0, 0, 0.749019607843137)]        {0 X' W: h9 O( Z; u
    [color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;) }; _0 o3 z9 A3 s' Y& N2 U: d
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
      i& {# {) }- Z! P  ^3 O7 l* h1 h[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)( C) P: @0 `/ h9 a  }0 M# v, ]/ ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        {) F! C5 O; C: e  a2 m' S
    [color=rgba(0, 0, 0, 0.749019607843137)]                return root;
    1 j- U/ _2 W+ F0 Y% a[color=rgba(0, 0, 0, 0.749019607843137)]        }
    . Q1 K6 w( N" m, x[color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树3 I. [# _7 Z. Q( B
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);# ?+ `) }$ |, n' ]  K% b
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)
    3 Y0 Y% P9 b; _% l4 ~7 r[color=rgba(0, 0, 0, 0.749019607843137)]                return lret;5 L! ^" R5 w& i
    [color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树0 V% q0 V# e8 [3 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);" w* Y: K& l2 x9 p, \0 v* R; u
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    8 M9 ?) o& ~  j7 P2 M7 [: Z6 x[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    * ?- ]- d" S* A4 A, J% `[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;1 B% f  ?3 q6 q. f1 T8 Y  {& B# G
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    7 ~5 }- d0 W/ a* b0 Z% ][color=rgba(0, 0, 0, 0.749019607843137)]————————————————
    ! [& ~8 f7 A0 X+ O, Q- F/ C, Y3 B) T: M[color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - u% G: Z! J/ }  n0 @[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/126841212  \& s6 G4 g: a
    # h! u: P6 p2 }; l* C. e, \; x
    7 g, W6 e/ c" z. g; D
    [color=rgba(0, 0, 0, 0.75)]
    ! B# B/ H6 s. H9 l* C% R  v2 l
    ! s! ?3 Y. Y6 {& o0 t; v2 e0 h

    8 {1 X# x/ X, I; B5 h( n5 d$ j9 a: M5 H' I; F- z- P+ M- g2 Q
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-15 12:21 , Processed in 0.492890 second(s), 50 queries .

    回顶部