QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2473|回复: 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 m' T3 j0 S# H9 r" l5 s; F7 o* I* T' z2 q
    [color=rgba(0, 0, 0, 0.749019607843137)]文章目录7 N. x5 c2 ]$ y: B6 S6 P
    [color=rgba(0, 0, 0, 0.749019607843137)]前言' A! a% k) M9 m, T, \) j. w4 e) j+ B/ `
    [color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式; C  P! E  z% k/ D  i
    [color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)
    3 Q6 u1 A2 ~2 K) b[color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历9 u6 u; o4 i" f' L
    [color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    - `2 C% h3 W, V! X0 ^! R5 U) t[color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    5 V( @  J( t6 T( }* V[color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度
    : N. z8 U4 y4 j- ?[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
      L! z8 n! a2 K1 O) H2 ^[color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    / c# W5 x8 e2 V* m7 A8 _' d. [[color=rgba(0, 0, 0, 0.749019607843137)]前言
    # G* w7 i! d: e/ B( S/ \8 r3 \[color=rgba(0, 0, 0, 0.749019607843137)]在学习二叉树的遍历之前,我们需要先创建一棵二叉树,然后才能学习其相关的基本操作,由于现在我们对二叉树结构的掌握还在初阶部分,为了降低大家的学习成本,我们先手动快速创建一棵简单的二叉树,快速进入二叉树的操作学习,这个方法在我们调试程序代码的时候,也非常适用。等二叉树结构了解的差不多时,我们再继续研究二叉树真正的创建方式。
    " O( J8 m, V. m  l5 d[color=rgba(0, 0, 0, 0.749019607843137)]* E. P# W  W' h! m

    # x2 T( D+ ^0 E2 J' W" @7 C5 @[color=rgba(0, 0, 0, 0.749019607843137)]1.二叉树的遍历方式
    0 @1 L7 h+ f( e( L3 x) Z[color=rgba(0, 0, 0, 0.749019607843137)]
    . A8 |* x, a- V/ i1 z

    % t" H- u* v& r/ t[color=rgba(0, 0, 0, 0.749019607843137)]按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历访问顺序:
      F- `' o7 a% E1 [[color=rgba(0, 0, 0, 0.749019607843137)]7 l1 r: W. Z1 f; W$ l

    1 {+ }! a0 V; x& y; ]! `[color=rgba(0, 0, 0, 0.749019607843137)]1. 前序遍历(先序,先根):根——左子树——右子树/ p! v. Z1 G0 T" [" E/ N0 e
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & M3 t! U$ r, {0 |8 v6 N

    4 J- _* B! @0 ?& q3 k/ z4 ^0 E[color=rgba(0, 0, 0, 0.749019607843137)], u! M/ ~4 h, M$ z& [
    0 h" ?8 l) L# S' R& ~  i) [3 N0 ?% a
    [color=rgba(0, 0, 0, 0.749019607843137)]2. 中序遍历(中根):左子树——根——右子树3 s! x% x1 u5 p
    [color=rgba(0, 0, 0, 0.749019607843137)]
    & d! K" V; `  @* ?1 A) z  r
    8 h4 D, M0 Y+ L
    [color=rgba(0, 0, 0, 0.749019607843137)]: L! i& q& b/ I$ P7 ^/ a

    - t2 h) A* n$ Z: j  }[color=rgba(0, 0, 0, 0.749019607843137)]3. 后序遍历(后根):左子树——右子树——根7 H% g1 F0 _. Q
    [color=rgba(0, 0, 0, 0.749019607843137)]
    ( j8 R" {* x/ i$ I9 |+ q
    . [% j8 Z. Q: [5 a% j
    [color=rgba(0, 0, 0, 0.749019607843137)]
    + H  g, o. w2 w. O( T

    2 Q9 A4 y' \4 v5 L4 s; B! L[color=rgba(0, 0, 0, 0.749019607843137)]2.二叉树的遍历及相关函数(代码实现)  I2 U1 A5 L, b4 u4 T
    [color=rgba(0, 0, 0, 0.749019607843137)]思路:分而治之2 E4 `$ X9 J0 m2 B3 g
    [color=rgba(0, 0, 0, 0.749019607843137)]1.首先我们要用简单的方式先创建出一棵二叉树,并赋予数据;, i4 l1 O. R! H9 `8 J. f
    [color=rgba(0, 0, 0, 0.749019607843137)]2.采用递归的方式,分别实现前序/中序/后序遍历这棵二叉树;+ y5 }/ {6 y! [# G1 _
    [color=rgba(0, 0, 0, 0.749019607843137)]3.尝试计算这个二叉树的大小(利用递归);3 A# v* T3 i# M3 `; h; G
    [color=rgba(0, 0, 0, 0.749019607843137)]4.尝试计算叶子结点的个数(利用递归);+ H4 d0 t3 o6 b4 \& F  d3 c
    [color=rgba(0, 0, 0, 0.749019607843137)]5.尝试计算二叉树的高度(利用递归);% l5 [. {- Z1 v* ^- @+ T) h
    [color=rgba(0, 0, 0, 0.749019607843137)]6.尝试写出计算第K层结点的个数的函数(利用递归);
    " D* Q) @7 K' E# e( U[color=rgba(0, 0, 0, 0.749019607843137)]7.尝试写出二叉树查找的函数(利用递归)。
    + a; W  ~, F+ `4 a: Q, j3 M[color=rgba(0, 0, 0, 0.749019607843137)]: G* I, B; P) m5 p) s
    & A$ H% E' d2 C" E8 k8 X/ |1 b
    [color=rgba(0, 0, 0, 0.749019607843137)]2.1前序/中序/后序的遍历
    ' J  i; {4 }1 p) W; v- T$ l7 P[color=rgba(0, 0, 0, 0.749019607843137)]#define _CRT_SECURE_NO_WARNINGS 1
    % ?* @, ]3 l0 o# _: s" |[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdio.h>7 D) P( x( d8 B  R/ {! S! o2 `
    [color=rgba(0, 0, 0, 0.749019607843137)]#include<assert.h>
    " n9 H6 u9 n/ `- b; O3 [' R- P2 h[color=rgba(0, 0, 0, 0.749019607843137)]#include<stdlib.h>
    ( ]9 |3 X1 P$ ^8 Y; p/ I[color=rgba(0, 0, 0, 0.749019607843137)]8 P6 u, C4 g" _1 k; f  E* v

    0 b$ f5 U& L: K" Y! R[color=rgba(0, 0, 0, 0.749019607843137)]typedef int BTDataType;
    7 [: C, `3 _: D, D' W' [# p% J[color=rgba(0, 0, 0, 0.749019607843137)]
    1 w6 y/ X! R; P8 l6 [3 ]# r  M; |4 [
    * g3 h5 Q# V# A2 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]//定义二叉树结点的结构体, ^  }9 y. v5 o( |0 M6 B6 U
    [color=rgba(0, 0, 0, 0.749019607843137)]typedef struct BinaryTreeNode
    7 [. e/ H- N3 ?: f2 s[color=rgba(0, 0, 0, 0.749019607843137)]{
    8 ^! D, `3 B) X3 T0 g' p[color=rgba(0, 0, 0, 0.749019607843137)]        BTDataType data;$ K% ^( e( c/ ^  J0 B( j
    [color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* left;
    - J* a: O( G/ k0 e[color=rgba(0, 0, 0, 0.749019607843137)]        struct BinaryTreeNode* right;6 ]: @! t* p) s2 x/ g5 |
    [color=rgba(0, 0, 0, 0.749019607843137)]}BTNode;4 n. U8 ~& ~7 k! `4 I! ^* y
    [color=rgba(0, 0, 0, 0.749019607843137)]
    # O# O. S7 G: L6 x9 p7 n# [% m& D

    % H& i* L  f& M/ U% b, q[color=rgba(0, 0, 0, 0.749019607843137)]//前序遍历
    4 X7 ^, S! {* O; B3 s: c[color=rgba(0, 0, 0, 0.749019607843137)]void PreOrder(BTNode* root)
    $ o9 u) o( a" ^# u" V5 n+ j$ n+ i[color=rgba(0, 0, 0, 0.749019607843137)]{
    6 m: O; `: r- z" N, a+ H[color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    8 l# Y7 J  h% K' X" k* o$ b6 a9 ][color=rgba(0, 0, 0, 0.749019607843137)]        {
    2 F8 Q+ \3 z& Q2 b# P& {1 g# Q[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");3 u: L1 l! Q1 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;# e8 G' f' Q. ]% E( n
    [color=rgba(0, 0, 0, 0.749019607843137)]        }7 \: M: R( k! O/ p8 I
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);5 w! n7 N, N6 r7 L, @  Y/ d# |
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->left);. H2 @% l' z0 _' H8 w$ G
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root->right);+ N4 G% _* c; S! D2 r! U, a! C
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    6 E( O0 G/ a& L. b9 r- J6 z$ I1 V$ {[color=rgba(0, 0, 0, 0.749019607843137)]//中序遍历( ^3 ^/ @2 ]: ?2 S: s( O8 s
    [color=rgba(0, 0, 0, 0.749019607843137)]void InOrder(BTNode* root)2 R  T  m& J* w) I2 G
    [color=rgba(0, 0, 0, 0.749019607843137)]{' K) U+ y# L5 }
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)& B- n& \7 w  T* j1 ^4 n
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    # F* @$ E/ C8 @, v# J, \+ v[color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");
    6 \# j' m1 P2 y- M[color=rgba(0, 0, 0, 0.749019607843137)]                return;0 l6 _3 H  \1 g" q6 z5 z
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    1 S3 M* H9 W' k[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->left);
      n$ M9 B! v( N7 j6 y9 O6 C[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    $ O/ q2 H  m8 P% A4 M[color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root->right);: l! p/ l  y6 O7 R  L& c9 M( y
    [color=rgba(0, 0, 0, 0.749019607843137)]}) m6 D3 c% N0 \5 O' T6 G- P
    [color=rgba(0, 0, 0, 0.749019607843137)]//后序遍历2 k/ F/ p8 n- D4 v/ B/ F: g, O
    [color=rgba(0, 0, 0, 0.749019607843137)]void PostOrder(BTNode* root)
    ) L2 u; s& x+ \[color=rgba(0, 0, 0, 0.749019607843137)]{+ h- b9 X- Y. v) I9 h
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)7 ^/ E& s2 z; P) E( m
    [color=rgba(0, 0, 0, 0.749019607843137)]        {! h2 }' V# z  |8 _0 ]
    [color=rgba(0, 0, 0, 0.749019607843137)]                printf("NULL ");) }# G- `; Z! N4 `, x* B( _6 v; ~" C
    [color=rgba(0, 0, 0, 0.749019607843137)]                return;  F) \% r% \# O7 V  R1 I2 Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        }
    / D0 i5 m! \  o[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->left);
    1 ~0 Q3 _+ P: X; ~[color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root->right);
    1 f6 j2 _' _! \9 Y' v& V, P# ]9 A[color=rgba(0, 0, 0, 0.749019607843137)]        printf("%d ", root->data);
    . [& G" S; E3 L( g" w[color=rgba(0, 0, 0, 0.749019607843137)]}9 q) ^* y/ f% X" b
    [color=rgba(0, 0, 0, 0.749019607843137)]//先创建一个简单的二叉树结构
    6 {1 d) h/ W! D' F3 J" V[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* CreateTree()" Z; u; v& P8 Z: W/ z
    [color=rgba(0, 0, 0, 0.749019607843137)]{2 y' L+ y9 Z4 u, x
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先动态开辟6个结点的空间2 j3 u! ]$ s7 N  Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n1 = (BTNode*)malloc(sizeof(BTNode));
    - V! X1 K$ u1 E* O9 @[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n1);# {: i+ K3 o  d, U8 e
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n2 = (BTNode*)malloc(sizeof(BTNode));/ `2 O( z7 C4 A& Q7 m% J
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n2);
    + \0 H0 e/ x$ V# t8 I' E% }  A9 f[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n3 = (BTNode*)malloc(sizeof(BTNode));
    $ m* l/ H) `- i[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n3);2 ]: D+ x, H! @* z8 z( j" @
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n4 = (BTNode*)malloc(sizeof(BTNode));
    $ I( g! V- Y, z7 u" K[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n4);
    3 I4 i& t# H" N4 G8 X[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n5 = (BTNode*)malloc(sizeof(BTNode));( g' C- M1 c# i8 @0 x  p
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(n5);- P2 \( B1 _' U7 s
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* n6 = (BTNode*)malloc(sizeof(BTNode));
    7 n( {6 j8 H" K. t# U8 H[color=rgba(0, 0, 0, 0.749019607843137)]        assert(n6);% X. q6 J3 b3 L) K( b4 U' e" U
    [color=rgba(0, 0, 0, 0.749019607843137)]% v! Y4 J7 Y' |" J- p

    4 Z' D) ]7 S' Q3 s1 T[color=rgba(0, 0, 0, 0.749019607843137)]        n1->data = 1;
    * i8 \6 d0 N2 }. e. v[color=rgba(0, 0, 0, 0.749019607843137)]        n2->data = 2;6 @; S! o: {0 T+ s, Y8 O! h
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->data = 3;
    7 n/ ]' x/ w* {: B6 I[color=rgba(0, 0, 0, 0.749019607843137)]        n4->data = 4;
    ' o9 [6 V- c# A6 ~# N9 ~[color=rgba(0, 0, 0, 0.749019607843137)]        n5->data = 5;; ~! W6 w9 a( E: e. S
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->data = 6;+ J, U7 ^1 k# z( |& k. v) ]  g
    [color=rgba(0, 0, 0, 0.749019607843137)]
    # ]1 a- p( C8 ]) [4 @

    ! J) R* w5 \0 _9 m# \3 C[color=rgba(0, 0, 0, 0.749019607843137)]        n1->left = n2;
    9 y1 w" [# G0 a  Q. X1 y[color=rgba(0, 0, 0, 0.749019607843137)]        n1->right = n4;- [2 I/ \! Q; K% Z; Y* y; O2 M# Z
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->left = n3;: \' N7 }2 x/ G
    [color=rgba(0, 0, 0, 0.749019607843137)]        n2->right = NULL;3 @; Y# w0 R2 M. A2 c7 y  U0 A
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->left = NULL;# {# n0 P$ R' g  q" E) u
    [color=rgba(0, 0, 0, 0.749019607843137)]        n3->right = NULL;
    * ~% L9 r, F+ ~[color=rgba(0, 0, 0, 0.749019607843137)]        n4->left = n5;
    # c. m8 _9 P; S: c; c1 u/ ~[color=rgba(0, 0, 0, 0.749019607843137)]        n4->right = n6;
    # Z% [8 D% ^- @/ L4 f( g7 N$ i* p[color=rgba(0, 0, 0, 0.749019607843137)]        n5->left = NULL;: R8 \7 B( a6 P
    [color=rgba(0, 0, 0, 0.749019607843137)]        n5->right = NULL;3 F1 J5 U. p* |( [# z5 H2 t. p
    [color=rgba(0, 0, 0, 0.749019607843137)]        n6->left = NULL;
    6 ]5 }: P  M% r" b( V[color=rgba(0, 0, 0, 0.749019607843137)]        n6->right = NULL;" g) S7 W% U" `
    [color=rgba(0, 0, 0, 0.749019607843137)]# D+ z/ `7 b0 s! Y$ |7 k+ V7 z

    ; Q. S: A; x; v3 r2 R3 f[color=rgba(0, 0, 0, 0.749019607843137)]        return n1;
    4 m% c8 |3 N% `  ], H8 z* l[color=rgba(0, 0, 0, 0.749019607843137)]}
    & V5 F1 P) Y5 H5 o8 H( c[color=rgba(0, 0, 0, 0.749019607843137)]
    . s) C1 f0 J4 C. h

    ! x: c# x1 F# V3 T& F8 [8 S[color=rgba(0, 0, 0, 0.749019607843137)]int main(). h) P5 v7 [" q
    [color=rgba(0, 0, 0, 0.749019607843137)]{2 h( G+ K' X( c1 P! ?
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先创建一个简单的二叉树结构
      c( v6 N+ g9 r5 P8 W' Q1 {) t: B[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* root = CreateTree();! S7 ?' U. W8 K# W# K3 O
    [color=rgba(0, 0, 0, 0.749019607843137)]5 o. u' E* X1 l' C, ?7 V
    - T5 o2 p% O0 X, F
    [color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树前序遍历
    " d8 \9 d% n5 l  E5 A0 q[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树前序遍历:");7 `$ L" c# A# E+ R% j
    [color=rgba(0, 0, 0, 0.749019607843137)]        PreOrder(root);
    - h" T! |  b1 P[color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    / F- z4 s9 R, j2 O+ `[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树中序遍历
    + D5 X* G5 v5 b/ R, I/ m[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树中序序遍历:");, L; v2 r$ K/ x! f& E! n. L
    [color=rgba(0, 0, 0, 0.749019607843137)]        InOrder(root);
    4 H5 F% Q& ]% t7 ][color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");
    8 L" J( r1 Y. R7 e% c; C[color=rgba(0, 0, 0, 0.749019607843137)]        //二叉树后序遍历
    % j' l5 S" P6 L5 z9 R' O/ D2 y/ U[color=rgba(0, 0, 0, 0.749019607843137)]        printf("二叉树后序遍历:");& h: B& h# j9 [! O. l- A" W
    [color=rgba(0, 0, 0, 0.749019607843137)]        PostOrder(root);: l9 i: z  A- l3 Y- }0 W
    [color=rgba(0, 0, 0, 0.749019607843137)]        printf("\n");3 v! S- X0 {* L' P, r5 `
    [color=rgba(0, 0, 0, 0.749019607843137)]; W& i& r! f7 D$ |

    6 o# X' i& [+ k8 `& W[color=rgba(0, 0, 0, 0.749019607843137)]        return 0;1 s2 y& y8 }# Y' |
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    * M9 k; z" u0 V) i[color=rgba(0, 0, 0, 0.749019607843137)]15 {; s% s/ Q: D1 G8 [
    [color=rgba(0, 0, 0, 0.749019607843137)]2+ R- N) t& W: }
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    / D# l  N" F0 V8 `4 q6 T: ^8 f[color=rgba(0, 0, 0, 0.749019607843137)]4" k# Y0 U, g+ c. [, ?+ |% X
    [color=rgba(0, 0, 0, 0.749019607843137)]5
    & U- h! c/ O% T8 T  z7 [& x[color=rgba(0, 0, 0, 0.749019607843137)]6! M- c) Q+ |! ?7 c# X) z/ [( G' O
    [color=rgba(0, 0, 0, 0.749019607843137)]76 a) `! e. U2 C
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    5 E& Q6 u3 c  v' N6 S! B: W" n  J[color=rgba(0, 0, 0, 0.749019607843137)]9
    + X& }# h4 J; r7 V2 q[color=rgba(0, 0, 0, 0.749019607843137)]100 @! y- m- F) G
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    & h" o  G" a: R" a% Q[color=rgba(0, 0, 0, 0.749019607843137)]12
    - v* ^  ~  [+ _- h$ X3 r! e) k9 Z[color=rgba(0, 0, 0, 0.749019607843137)]13
    - ~' p+ V! ^# t2 B7 `6 Q$ c[color=rgba(0, 0, 0, 0.749019607843137)]14
      p/ B% z7 f; m( \* x/ Z5 l[color=rgba(0, 0, 0, 0.749019607843137)]154 H: s/ l* |4 s( G1 y
    [color=rgba(0, 0, 0, 0.749019607843137)]169 R; R% h- k) J, E
    [color=rgba(0, 0, 0, 0.749019607843137)]17
    % |' @# m# [/ \/ f% A[color=rgba(0, 0, 0, 0.749019607843137)]18
    3 |! X+ t3 F8 t8 W7 D[color=rgba(0, 0, 0, 0.749019607843137)]19
    ) I  J+ Y5 a# B/ T; s5 f4 u[color=rgba(0, 0, 0, 0.749019607843137)]20  n" e) u) _3 j# \6 {/ U. U% q
    [color=rgba(0, 0, 0, 0.749019607843137)]21
    # Y0 Y0 M; ~6 t( e  d% }& J[color=rgba(0, 0, 0, 0.749019607843137)]224 B$ l1 c7 v6 U! k, n' Z# N, ?2 j9 r
    [color=rgba(0, 0, 0, 0.749019607843137)]23
    2 ^* W8 E/ `6 @+ a. x[color=rgba(0, 0, 0, 0.749019607843137)]24
    5 s, E( d2 L5 C, E; |) M" ~6 m[color=rgba(0, 0, 0, 0.749019607843137)]25
    9 ?# e4 T- W6 k+ V[color=rgba(0, 0, 0, 0.749019607843137)]26; }5 d* x" ?5 e2 z
    [color=rgba(0, 0, 0, 0.749019607843137)]27: n: [! z& H0 F4 Z: Z- C
    [color=rgba(0, 0, 0, 0.749019607843137)]28
    2 ]; N9 i3 @, {$ H- O[color=rgba(0, 0, 0, 0.749019607843137)]29
    # x, o! a) i; Z! e[color=rgba(0, 0, 0, 0.749019607843137)]30
    * C+ ^( c: B; }[color=rgba(0, 0, 0, 0.749019607843137)]31
    / Y$ V' V, n* w. f- j5 L0 V[color=rgba(0, 0, 0, 0.749019607843137)]32; F  f& [5 ]) p* |, {
    [color=rgba(0, 0, 0, 0.749019607843137)]333 R5 F$ p5 _" }
    [color=rgba(0, 0, 0, 0.749019607843137)]34
    3 J/ `6 Q* q% C3 P/ `& p[color=rgba(0, 0, 0, 0.749019607843137)]35, a; J4 X( C% A$ C. b
    [color=rgba(0, 0, 0, 0.749019607843137)]36
    ' q0 w  J% Q3 q- |  Q% n+ D7 z% |[color=rgba(0, 0, 0, 0.749019607843137)]37$ ^/ j) P$ E+ I$ H$ w
    [color=rgba(0, 0, 0, 0.749019607843137)]388 J# C; Q& B. p' g
    [color=rgba(0, 0, 0, 0.749019607843137)]392 E: g; m9 d5 Z! V7 c
    [color=rgba(0, 0, 0, 0.749019607843137)]40
    9 \7 k  e5 p' B+ w' ^3 ]6 a! o[color=rgba(0, 0, 0, 0.749019607843137)]41
    & J$ N8 f1 W# r) z! p[color=rgba(0, 0, 0, 0.749019607843137)]42( i& b$ d: O5 S9 ~! U' P8 i
    [color=rgba(0, 0, 0, 0.749019607843137)]43
    . F1 K' Y7 ~( H8 E) b% |[color=rgba(0, 0, 0, 0.749019607843137)]44! A; C0 W" d& _' K+ W2 e
    [color=rgba(0, 0, 0, 0.749019607843137)]45
    / |( W; |1 ~2 X: |: y[color=rgba(0, 0, 0, 0.749019607843137)]46" \, f; u' Q! ]
    [color=rgba(0, 0, 0, 0.749019607843137)]47
    ' H+ O8 r5 x) w- j( \, W' ^) _5 R: _[color=rgba(0, 0, 0, 0.749019607843137)]48. u& `5 g2 q4 U: _8 S: h
    [color=rgba(0, 0, 0, 0.749019607843137)]49
    + H6 J! J1 t" W+ l; z: k3 a3 k[color=rgba(0, 0, 0, 0.749019607843137)]50$ y  s2 y: \! u8 t+ {9 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]51
    # {9 Q' h9 ?2 Y[color=rgba(0, 0, 0, 0.749019607843137)]52
    6 h8 Z- N, E* I2 I* R5 }[color=rgba(0, 0, 0, 0.749019607843137)]531 |8 N2 B* t$ F$ H6 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]54
    ' y/ a( \" B% @& P- L7 f# h[color=rgba(0, 0, 0, 0.749019607843137)]557 l' H' O1 Y0 k8 p8 p
    [color=rgba(0, 0, 0, 0.749019607843137)]56
    8 {+ s9 b  V4 m2 ?2 U/ T2 k* Z[color=rgba(0, 0, 0, 0.749019607843137)]57
    ' u: q9 `. l: L4 N- R" Q9 B3 I0 O( L[color=rgba(0, 0, 0, 0.749019607843137)]58
      O- s1 k! ]. J! l& _[color=rgba(0, 0, 0, 0.749019607843137)]59
    * _( I4 F, t4 Z9 f[color=rgba(0, 0, 0, 0.749019607843137)]607 V1 A7 g; Y! x# k$ A) N
    [color=rgba(0, 0, 0, 0.749019607843137)]61
    ! D- x; ~9 J4 e4 X* `3 w* `6 x! T[color=rgba(0, 0, 0, 0.749019607843137)]62
    ! k/ a. V5 ~2 q5 T$ R[color=rgba(0, 0, 0, 0.749019607843137)]63
    8 L) U# Y1 Q4 u- ?# i1 Q0 e8 @$ ^[color=rgba(0, 0, 0, 0.749019607843137)]64" t: Z8 D( }/ V" n/ S( C
    [color=rgba(0, 0, 0, 0.749019607843137)]65! t6 E: b& P+ n. R: _2 W' Q4 N: W
    [color=rgba(0, 0, 0, 0.749019607843137)]66# S6 r% Y; D4 q( u8 [5 T& q
    [color=rgba(0, 0, 0, 0.749019607843137)]67
    3 Y9 N9 t1 Y5 S[color=rgba(0, 0, 0, 0.749019607843137)]68
    ' _- G: F. d# S[color=rgba(0, 0, 0, 0.749019607843137)]69+ i' ~# N% e- ?1 d! E
    [color=rgba(0, 0, 0, 0.749019607843137)]70
    1 y( u- C; o4 r[color=rgba(0, 0, 0, 0.749019607843137)]71
    + W1 {& l  @) J# e[color=rgba(0, 0, 0, 0.749019607843137)]72
    ; y8 n" {" y+ ^4 g[color=rgba(0, 0, 0, 0.749019607843137)]73+ G$ q+ S5 V! Y
    [color=rgba(0, 0, 0, 0.749019607843137)]74+ \" D) C& E  k; Q
    [color=rgba(0, 0, 0, 0.749019607843137)]75
    & g! ^7 C5 ?0 W[color=rgba(0, 0, 0, 0.749019607843137)]76
    - u! ~: d- l5 g2 }7 D$ ?9 k5 L, e[color=rgba(0, 0, 0, 0.749019607843137)]77
    0 I# H* _  [" u2 S. |5 ~; r2 ?[color=rgba(0, 0, 0, 0.749019607843137)]78# O3 p9 O  N! u
    [color=rgba(0, 0, 0, 0.749019607843137)]79
    6 _% Z3 T2 `7 |2 N/ R: O5 ~; i[color=rgba(0, 0, 0, 0.749019607843137)]80+ u5 k) s0 e9 ]  j* O/ c
    [color=rgba(0, 0, 0, 0.749019607843137)]817 z" l1 M9 B8 c% W# ^
    [color=rgba(0, 0, 0, 0.749019607843137)]82
    9 C5 d9 R; o, H' ?! X[color=rgba(0, 0, 0, 0.749019607843137)]83
    ( g7 |$ A9 ~+ M. b4 Y[color=rgba(0, 0, 0, 0.749019607843137)]84
    8 r& M% c& y+ [[color=rgba(0, 0, 0, 0.749019607843137)]85
    # C+ V/ ?* ]; n[color=rgba(0, 0, 0, 0.749019607843137)]86
    ) ^0 M7 p5 z& y' d5 p5 G  m! L[color=rgba(0, 0, 0, 0.749019607843137)]87
    " R" p7 ~% Y6 E, k0 [# q[color=rgba(0, 0, 0, 0.749019607843137)]88
    5 a! f& h% z5 N- @6 ^7 [7 Z[color=rgba(0, 0, 0, 0.749019607843137)]89
    3 B- m, O% p* L3 q[color=rgba(0, 0, 0, 0.749019607843137)]90) Q# k# o2 ~' H/ H' b/ I
    [color=rgba(0, 0, 0, 0.749019607843137)]918 y0 p. \& X# Q) y9 O' A
    [color=rgba(0, 0, 0, 0.749019607843137)]926 ?8 l# o* d2 e  M/ O
    [color=rgba(0, 0, 0, 0.749019607843137)]933 ?2 k& h( t0 q- c
    [color=rgba(0, 0, 0, 0.749019607843137)]94
    6 V4 a: w) D- [; U[color=rgba(0, 0, 0, 0.749019607843137)]95. T) }  x3 M+ C+ W+ L& Y% K
    [color=rgba(0, 0, 0, 0.749019607843137)]96
    ( J, f  Q8 b* D3 s[color=rgba(0, 0, 0, 0.749019607843137)]97
    + ^# M" ^1 s( |, ~) Q$ s[color=rgba(0, 0, 0, 0.749019607843137)]98& @3 F. Z5 \7 w0 f) h' j* B
    [color=rgba(0, 0, 0, 0.749019607843137)]99
    6 M: V( g( ?) m3 _# E- O5 @9 r/ s! {[color=rgba(0, 0, 0, 0.749019607843137)]100
    ( c. S, D& Y& q7 l[color=rgba(0, 0, 0, 0.749019607843137)]1016 R/ `, P; e; o2 t7 C
    [color=rgba(0, 0, 0, 0.749019607843137)]102
    ' K2 `2 U; C0 Z2 E8 j6 r: i[color=rgba(0, 0, 0, 0.749019607843137)]103
    - l4 U, z* `' l- f[color=rgba(0, 0, 0, 0.749019607843137)]1045 F1 y1 ]& G2 C1 M- M; H% E
    [color=rgba(0, 0, 0, 0.749019607843137)]1050 h+ E6 E# P' S- r3 @  q
    [color=rgba(0, 0, 0, 0.749019607843137)]1060 c, [9 |! L7 ^
    [color=rgba(0, 0, 0, 0.749019607843137)]107
    , @, Y" x9 N4 o/ A[color=rgba(0, 0, 0, 0.749019607843137)]1084 D5 f; v' s  ]. T6 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]109
    9 H5 E2 @+ w; k4 e2 S- W# c- F[color=rgba(0, 0, 0, 0.749019607843137)]110; ~6 D" S8 g8 C' \
    [color=rgba(0, 0, 0, 0.749019607843137)]111
    3 a+ e: b4 Y( y0 |4 |# _* M[color=rgba(0, 0, 0, 0.749019607843137)]测试结果:
    7 W  c' T& U9 r( Q& P% W[color=rgba(0, 0, 0, 0.749019607843137)]; k: \3 a* ^4 u! i( y/ D! r& q% Z

    3 F/ S4 U" D; S& x0 |[color=rgba(0, 0, 0, 0.749019607843137)]
    / o& x7 t' v4 y# I

    4 d' k+ B8 \- H' h$ R& n  \[color=rgba(0, 0, 0, 0.749019607843137)]2.2计算二叉树的大小
    ' ?* `. h- C6 h, U2 ?[color=rgba(0, 0, 0, 0.749019607843137)]时间复杂度为O(N)
    # H% N# H5 e1 ~$ t/ g! a[color=rgba(0, 0, 0, 0.749019607843137)]' O, x5 O: g6 S' Q
    ! k4 D4 ]0 k8 x5 a: W" m  J
    [color=rgba(0, 0, 0, 0.749019607843137)]//二叉树的大小3 j2 X) T- b0 ?' O8 {7 z1 z9 O
    [color=rgba(0, 0, 0, 0.749019607843137)]//法一:全局变量
    ( N2 }) h" i4 A2 Q[color=rgba(0, 0, 0, 0.749019607843137)]//int count = 0;% H# j. ^8 M5 m9 x9 h2 f% G
    [color=rgba(0, 0, 0, 0.749019607843137)]//void TreeSize(BTNode* root)
    5 R' K: [* s3 ][color=rgba(0, 0, 0, 0.749019607843137)]//{
    : _5 {  x! K2 g9 ?. p[color=rgba(0, 0, 0, 0.749019607843137)]//        if (root == NULL)2 k% C5 T5 F" C) C1 P
    [color=rgba(0, 0, 0, 0.749019607843137)]//        {  r  M, c" B  z9 H, W( u7 Y
    [color=rgba(0, 0, 0, 0.749019607843137)]//                return;
    * `9 S# h2 {1 M( N[color=rgba(0, 0, 0, 0.749019607843137)]//        }
    ! Y$ Y) u8 y# T$ A" p; q  |" D[color=rgba(0, 0, 0, 0.749019607843137)]//        count++;
    5 u1 G( U8 v3 k3 b- v[color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->left);5 o' ~; p' ^2 Q1 o0 K9 A
    [color=rgba(0, 0, 0, 0.749019607843137)]//        TreeSize(root->right);  `: f' U& ^$ E) T3 z
    [color=rgba(0, 0, 0, 0.749019607843137)]//: H6 S. P2 @) d, X1 g$ D6 i
    [color=rgba(0, 0, 0, 0.749019607843137)]//        return;//函数栈帧层层返回,最后回到根节点1,结束了1的右子树函数,什么都不返回,因为count是全局变量
      @( A: k/ X  k% g* [! o8 K[color=rgba(0, 0, 0, 0.749019607843137)]//}
    ) Y0 N6 y, l/ @! O/ ?  r9 |! q[color=rgba(0, 0, 0, 0.749019607843137)]//法二:子问题思路:分而治之, m( N$ v* Q  v9 i/ F7 _
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeSize(BTNode* root)$ \5 c" Y+ Q* i" |  o
    [color=rgba(0, 0, 0, 0.749019607843137)]{' q; Y3 D2 P+ o0 ^( b; o* V
    [color=rgba(0, 0, 0, 0.749019607843137)]        return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;2 W) O  M5 h1 z5 `" \
    [color=rgba(0, 0, 0, 0.749019607843137)]}. g8 I* l% @6 k# \
    [color=rgba(0, 0, 0, 0.749019607843137)]1/ p' d6 _3 y% n2 S% Z3 M
    [color=rgba(0, 0, 0, 0.749019607843137)]2. d: b2 o* r' d0 B/ o6 T" S; M
    [color=rgba(0, 0, 0, 0.749019607843137)]3  g4 [! }2 L# L  n7 b: P6 _
    [color=rgba(0, 0, 0, 0.749019607843137)]4# s$ `. w! Y  k! q4 a4 `6 y' y
    [color=rgba(0, 0, 0, 0.749019607843137)]58 @4 l% ~6 ^  l2 P
    [color=rgba(0, 0, 0, 0.749019607843137)]6
    # R0 `. p5 w# ?/ J/ w6 @7 ?[color=rgba(0, 0, 0, 0.749019607843137)]7! f5 i% q6 y* G& s# b
    [color=rgba(0, 0, 0, 0.749019607843137)]8
    4 W! o5 B  E- |) ?[color=rgba(0, 0, 0, 0.749019607843137)]9
    + v$ V: X$ M' u1 b- q, e, j0 k[color=rgba(0, 0, 0, 0.749019607843137)]106 z, A# m5 T( s2 J, c! ?& Z
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    % r# V7 \5 \# J- F[color=rgba(0, 0, 0, 0.749019607843137)]12( T# m# n4 ?0 i; S9 V  }! u# t
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    4 f' c( T, @% l8 L) W# N[color=rgba(0, 0, 0, 0.749019607843137)]14
    4 L& J" ^) Y( }$ E7 s) b[color=rgba(0, 0, 0, 0.749019607843137)]15
    / I. q" O3 E3 g! `" N[color=rgba(0, 0, 0, 0.749019607843137)]16) R, u# D' ~9 p* E- m
    [color=rgba(0, 0, 0, 0.749019607843137)]17* t: }( n+ w9 A" S0 j) {
    [color=rgba(0, 0, 0, 0.749019607843137)]184 X2 U, E: q1 h. q, m2 O1 j
    [color=rgba(0, 0, 0, 0.749019607843137)]19
    + U3 L, A6 r, U8 W8 L+ K# y[color=rgba(0, 0, 0, 0.749019607843137)]209 `. |, [8 j/ \
    [color=rgba(0, 0, 0, 0.749019607843137)]2.3计算二叉树叶子结点的个数
    2 ~4 n% e9 `  E& e[color=rgba(0, 0, 0, 0.749019607843137)]//计算二叉树叶子结点的个数% ]9 I% X8 L4 Z( @, Q" ]" J5 ~
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeLeafSize(BTNode* root)3 n& f% v7 v' E3 m: N$ p2 x3 D1 z8 }! X3 N
    [color=rgba(0, 0, 0, 0.749019607843137)]{* Y2 P/ {! x, @7 W$ Y
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)//首先得考虑空树的情况,0个叶子结点% c% ?8 ]9 z% q  g+ l9 p7 o! a
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
    + i* G5 a- ]. b4 A[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;9 n- V' D# B% m$ Y& m& q3 J
    [color=rgba(0, 0, 0, 0.749019607843137)]        }/ d! B: B2 J, Z+ ?! C: @
    [color=rgba(0, 0, 0, 0.749019607843137)]        //叶子结点的特征就是左右子树为空$ O" h* ]% k; [. z# n, C
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root->left == NULL && root->right == NULL)& y! j1 G6 J: E7 c9 M, Y. ~
    [color=rgba(0, 0, 0, 0.749019607843137)]        {
      c4 E  o/ L' `. v[color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    5 J; X) Y) N) Z& G& o; Q[color=rgba(0, 0, 0, 0.749019607843137)]        }
    " X" g! @' k7 V9 l$ o* C3 {[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLeafSize(root->left) + TreeLeafSize(root->right);
    $ r' x' B! K( O8 H0 F[color=rgba(0, 0, 0, 0.749019607843137)]}% E; C+ p. @! ]0 Y. N. H; f
    [color=rgba(0, 0, 0, 0.749019607843137)]1
    # _: h6 g) u. D7 d, _[color=rgba(0, 0, 0, 0.749019607843137)]2
    % j# i+ L+ V8 D7 }6 u, v[color=rgba(0, 0, 0, 0.749019607843137)]39 x* v' i* J( g0 {7 X2 l
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    * f% H4 @- S" b% C" ~( a  P[color=rgba(0, 0, 0, 0.749019607843137)]5
      A& j; K" p$ S[color=rgba(0, 0, 0, 0.749019607843137)]6
    / V4 ?( u2 I/ p, w+ d0 L[color=rgba(0, 0, 0, 0.749019607843137)]7
      X, c* M) k( z, c% W" O  c6 Y! i[color=rgba(0, 0, 0, 0.749019607843137)]8; n9 I* g2 X' P1 O! d
    [color=rgba(0, 0, 0, 0.749019607843137)]9! p2 l. d5 Q# v
    [color=rgba(0, 0, 0, 0.749019607843137)]10
    3 `# H2 _, h! l0 I) K[color=rgba(0, 0, 0, 0.749019607843137)]111 I% J. q* b8 t. `# T" s& U
    [color=rgba(0, 0, 0, 0.749019607843137)]12
    0 J: L2 Q% ^# @- |[color=rgba(0, 0, 0, 0.749019607843137)]13: }/ a' h6 F8 `( W4 o8 u+ g
    [color=rgba(0, 0, 0, 0.749019607843137)]14# d% }  |$ ^' k: o: R
    [color=rgba(0, 0, 0, 0.749019607843137)]2.4计算二叉树的高度0 T) c) s; F' a0 C- V& ^
    [color=rgba(0, 0, 0, 0.749019607843137)]int TreeHeight(BTNode* root)
    4 q7 |: V7 X& A5 [/ s( C* d[color=rgba(0, 0, 0, 0.749019607843137)]{
    - l. K5 n1 X  `; y( C[color=rgba(0, 0, 0, 0.749019607843137)]        //空树高度为0! J. |5 m, e6 m. \+ a1 r0 i, z- b2 }
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    - z; c4 L6 |0 N4 p% L6 |[color=rgba(0, 0, 0, 0.749019607843137)]        {
    $ t; I* s) a  U' m2 _- K# `8 }[color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    7 t! \7 R- O8 D4 H( X  g# t' _" l[color=rgba(0, 0, 0, 0.749019607843137)]        }6 \+ Z$ a: h4 `6 {7 {
    [color=rgba(0, 0, 0, 0.749019607843137)]        //树的高度是较高的那棵子树
    7 a7 g/ P/ G( [7 S, n[color=rgba(0, 0, 0, 0.749019607843137)]        int lh = TreeHeight(root->left);//左子树的高度' K+ w$ S/ m' D8 t! e
    [color=rgba(0, 0, 0, 0.749019607843137)]        int rh = TreeHeight(root->right);//右子树的高度
    2 E( z. s, \; x) \[color=rgba(0, 0, 0, 0.749019607843137)]9 k2 _$ T( D5 L0 W
    . f. ~9 F* c$ `" E0 I
    [color=rgba(0, 0, 0, 0.749019607843137)]        return lh > rh ? lh + 1 : rh + 1;; i# u. v" _  d# S9 ^7 h( I
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    3 |  P3 G# e9 L( n7 U! o. \[color=rgba(0, 0, 0, 0.749019607843137)]1
    / X4 r: D2 v1 R( n7 V' w[color=rgba(0, 0, 0, 0.749019607843137)]2
    . @  }1 ?& @' m! b, k' c. C; R; P[color=rgba(0, 0, 0, 0.749019607843137)]3. _$ B' H; g$ G) x2 M2 D6 \
    [color=rgba(0, 0, 0, 0.749019607843137)]4
    ' {5 X$ s  @" G7 [7 R! S[color=rgba(0, 0, 0, 0.749019607843137)]5
    * t: u5 I8 \% B- y. Z[color=rgba(0, 0, 0, 0.749019607843137)]6: m( T1 m# z: L0 N/ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]7+ H. n, Q8 V: ?2 s" Y+ f6 Q
    [color=rgba(0, 0, 0, 0.749019607843137)]8' R9 D" T4 y( m& x
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    ; u5 T* L  H# S- p9 p[color=rgba(0, 0, 0, 0.749019607843137)]10. ]. a- |' [2 Z, K& F, ^" q, a. s
    [color=rgba(0, 0, 0, 0.749019607843137)]11
    6 U1 T: A0 c8 `; V9 x- W) m. j[color=rgba(0, 0, 0, 0.749019607843137)]12
    ' \! a2 h: a; x+ B9 i2 h' `+ r[color=rgba(0, 0, 0, 0.749019607843137)]13
    0 v+ }- M6 h. N+ @+ s[color=rgba(0, 0, 0, 0.749019607843137)]2.5计算第K层结点的个数
    8 s& h4 G) d& J: f; D- t, w[color=rgba(0, 0, 0, 0.749019607843137)]- L: g  J6 K) a8 j9 e

      B6 L/ l! m2 y1 R9 _[color=rgba(0, 0, 0, 0.749019607843137)]
      f, x& x" x# F
    4 z7 Y; V. `) h! p7 o6 S0 ?
    [color=rgba(0, 0, 0, 0.749019607843137)]求第K层的结点个数,转换成求子树第K-1层的结点个数。举个栗子:如果我们要求这棵二叉树第3层的结点个数(为3),就转换成求左子树根结点2的第2层的结点个数+右子树4第二层的结点个数。。。
    : R3 X" N, j# \5 |[color=rgba(0, 0, 0, 0.749019607843137)]
    5 A+ L% G$ _! Y2 I6 K' {

    ) H# T9 a+ j  I+ D[color=rgba(0, 0, 0, 0.749019607843137)]//计算第K层结点的个数
    ) V* v  j0 H5 v* p! L) Z[color=rgba(0, 0, 0, 0.749019607843137)]int TreeLevel(BTNode* root,int K)$ V7 m2 A; a* |: ^7 d  G* r
    [color=rgba(0, 0, 0, 0.749019607843137)]{1 B. P. E2 _9 i
    [color=rgba(0, 0, 0, 0.749019607843137)]        assert(K > 0);6 q' D. Q& B8 f0 j; e7 R
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)# B8 I. S5 l# `, h) e, j" Z/ ^
    [color=rgba(0, 0, 0, 0.749019607843137)]        {' }; B( ~) _5 e
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 0;
    , g  T7 P* V" a. [) E; T( q[color=rgba(0, 0, 0, 0.749019607843137)]        }
    - m0 O/ |3 Q  E0 n4 o[color=rgba(0, 0, 0, 0.749019607843137)]        //如果是第一层(递归出口)
      d* t2 t6 Q- O% g[color=rgba(0, 0, 0, 0.749019607843137)]        if (K == 1)% ^( A) I3 ^5 j
    [color=rgba(0, 0, 0, 0.749019607843137)]        {- W) A. {% d+ d+ r0 z& [$ \
    [color=rgba(0, 0, 0, 0.749019607843137)]                return 1;
    / c6 V, ^9 h5 C/ _4 F% `3 `) J[color=rgba(0, 0, 0, 0.749019607843137)]        }* q& J  F1 e2 f. ^: F
    [color=rgba(0, 0, 0, 0.749019607843137)]        //转换成子树的第K-1层
    8 x% S  {/ v3 D, q[color=rgba(0, 0, 0, 0.749019607843137)]        return TreeLevel(root->left,K-1) + TreeLevel(root->right,K-1);
      ^/ b4 U, ?. u* q7 _6 o# Q[color=rgba(0, 0, 0, 0.749019607843137)]}+ n) s' w" J8 X/ I- c1 e
    [color=rgba(0, 0, 0, 0.749019607843137)]1( n0 X6 k; L- N
    [color=rgba(0, 0, 0, 0.749019607843137)]2$ ?, u6 I; @8 Y, \
    [color=rgba(0, 0, 0, 0.749019607843137)]3
    0 M) K! r+ d% `/ w$ ^[color=rgba(0, 0, 0, 0.749019607843137)]4
    3 ^0 j: a2 Z/ n. H+ Q7 b! A[color=rgba(0, 0, 0, 0.749019607843137)]5
    - n5 ~( {: s* X* |6 I. g[color=rgba(0, 0, 0, 0.749019607843137)]69 F% m' d3 T6 g/ c! E1 H- F5 i
    [color=rgba(0, 0, 0, 0.749019607843137)]7
    8 ]. }. {+ U% J" `7 R[color=rgba(0, 0, 0, 0.749019607843137)]8/ n- Y+ s* i' R+ \( }
    [color=rgba(0, 0, 0, 0.749019607843137)]9
    ; v/ P$ M5 _$ D( {& u- N6 o[color=rgba(0, 0, 0, 0.749019607843137)]10
    $ v3 E1 @& G- I2 Z% m+ O) S* M0 S[color=rgba(0, 0, 0, 0.749019607843137)]116 h' C6 G& {$ W3 n8 y% w
    [color=rgba(0, 0, 0, 0.749019607843137)]12, w) t4 X: y* |* b' u( g
    [color=rgba(0, 0, 0, 0.749019607843137)]13
    ) a  Z4 `! Z; J[color=rgba(0, 0, 0, 0.749019607843137)]14) P$ z3 R; b& N/ u- r
    [color=rgba(0, 0, 0, 0.749019607843137)]15$ ~; ?6 y6 [3 I! ?* i6 n
    [color=rgba(0, 0, 0, 0.749019607843137)]169 ]0 \* M7 a) z: Q0 r
    [color=rgba(0, 0, 0, 0.749019607843137)]2.6二叉树查找
    6 j9 i& T8 v6 Q+ J3 i# `' a[color=rgba(0, 0, 0, 0.749019607843137)]//二叉树查找
    7 Q0 x: t4 s. D  `9 ?5 B* e2 u# `[color=rgba(0, 0, 0, 0.749019607843137)]BTNode* TreeFind(BTNode* root, BTDataType data)
    7 \5 s* n0 q% G; W3 J[color=rgba(0, 0, 0, 0.749019607843137)]{- v4 c5 C! J9 I2 F7 a
    [color=rgba(0, 0, 0, 0.749019607843137)]        if (root == NULL)
    & }9 n8 w5 h( U6 D2 S  [8 K& t; M[color=rgba(0, 0, 0, 0.749019607843137)]        {
    8 x5 A# M3 c: i2 K* Q  y" K[color=rgba(0, 0, 0, 0.749019607843137)]                return NULL;
    . a& G* @2 K9 k. o[color=rgba(0, 0, 0, 0.749019607843137)]        }
    # y4 T: t) @5 Q* R[color=rgba(0, 0, 0, 0.749019607843137)]        if (root->data == data)
    ( G4 S( p+ h/ ~$ Q[color=rgba(0, 0, 0, 0.749019607843137)]        {# }# y* w2 k+ U
    [color=rgba(0, 0, 0, 0.749019607843137)]                return root;
    # e* D) T' R$ U; W$ m' K[color=rgba(0, 0, 0, 0.749019607843137)]        }) W) D# P  ^! q" f0 ~0 m4 P0 v
    [color=rgba(0, 0, 0, 0.749019607843137)]        //先查找左子树+ {# d. O7 i8 B; w2 V
    [color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* lret = TreeFind(root->left, data);
    $ E% o; E) s# {8 f9 b9 A: t* e. y[color=rgba(0, 0, 0, 0.749019607843137)]        if (lret)
    ; C: W: d, O3 V6 C[color=rgba(0, 0, 0, 0.749019607843137)]                return lret;
    ) g+ l  z2 N! A) {3 v[color=rgba(0, 0, 0, 0.749019607843137)]        //再查找右子树
    4 X) k8 x! @1 f0 z, c2 \- q[color=rgba(0, 0, 0, 0.749019607843137)]        BTNode* rret = TreeFind(root->right, data);
    $ n* t0 k( e3 q[color=rgba(0, 0, 0, 0.749019607843137)]        if (rret)
    , K" m" C1 n8 f& W: Q6 V[color=rgba(0, 0, 0, 0.749019607843137)]                return rret;
    ) h3 ]5 k. ?' _6 W) K2 J[color=rgba(0, 0, 0, 0.749019607843137)]        return NULL;5 N. e5 q  k, `! m& m; o
    [color=rgba(0, 0, 0, 0.749019607843137)]}
    1 ~8 T0 M9 h) n1 k/ K[color=rgba(0, 0, 0, 0.749019607843137)]————————————————
    ) |* P9 {& ^+ v/ D1 l4 f[color=rgba(0, 0, 0, 0.749019607843137)]版权声明:本文为CSDN博主「SouLinya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / e; U) H5 ]- [" T+ x+ Q[color=rgba(0, 0, 0, 0.749019607843137)]原文链接:https://blog.csdn.net/weixin_63449996/article/details/1268412128 N1 v( J$ X+ A7 S6 @0 Z

    1 k/ D1 a. K) _) T$ a, m: P. ]
    [color=rgba(0, 0, 0, 0.75)]) I  E# X: C3 I+ P9 o1 Z
    5 ]0 b: _# W2 i+ I
    - T7 I5 W7 D0 t( a9 @, N: Z
    3 k% |: T  p( z! j2 M3 f
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-5-26 05:16 , Processed in 0.418759 second(s), 50 queries .

    回顶部