数据结构——二叉树、遍历的相关练习题

652 阅读4分钟

树:

  • 树的定义:

    • 树(Tree): n(n≥0)个结点构成的有限集合。

      • 当n=0时,称为空树;
      • 对于任一棵非空树(n> 0),它具备以下性质:
      • 树中有一个称为“根(Root)”的特殊结点,用 root 表示;
      • 其余结点可分为m(m>0)个互不相交的有限集T1,T2,... ,Tm,其中每个集合本身又是一棵树,称为原来树的“子树(SubTree)”
    • 注意:

      • 子树之间不可以相交
      • 除了根结点外,每个结点有且仅有一个父结点;
      • 一棵N个结点的树有N-1条边。
  • 树的术语:

    • 1.结点的度(Degree):结点的子树个数.
    • 2.树的度:树的所有结点中最大的度数. (树的度通常为结点的个数N-1)
    • 3.叶结点(Leaf):度为0的结点. (也称为叶子结点)
    • 4.父结点(Parent):有子树的结点是其子树的根结点的父结点
    • 5.子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点。
    • 6.兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点。
    • 7.路径和路径长度:从结点n1到nk的路径为一个结点序列n1 , n2,… , nk, ni是 ni+1的父结点。路径所包含边的个数为路径的长度。
    • 8.结点的层次(Level):规定根结点在1层,其它任一结点的层数是其父结点的层数加1。
    • 9.树的深度(Depth):树中所有结点中的最大层次是这棵树的深度。

二叉树:

定义:

  • 二叉树可以为空, 也就是没有结点.
  • 若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。

特性:

  • 一个二叉树第 i 层的最大结点数为:2^(i-1), i >= 1;

  • 深度为k的二叉树有最大结点总数为: 2^k - 1, k >= 1;

  • 对任何非空二叉树 T,若n0表示叶结点的个数、n2是度为2的非叶结点个数,那么两者满足关系n0 = n2 + 1。

存储:

使用链表存储,每个结点封装成一个node,node中包含存储的数据,左结点的引用,右结点的引用。

二叉搜索树:

定义:二叉排序树或二叉查找树

二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:

  • 非空左子树的所有键值小于根结点的键值
  • 非空右子树的所有键值大于根结点的键值
  • 左、右子树本身也都是二叉搜索树。

二叉树的遍历:

常见的有三种方式: 先序遍历/中序遍历/后续遍历. (还有程序遍历, 使用较少, 可以使用队列来完成)

先序遍历:(根左右)

过程:

1.访问根结点

2.先序遍历其左子树

3.先序遍历其右子树

图解:

image.png

中序遍历:(左根右)

过程:

1.先从最左边开始, 进行中序遍历.

2.依次向右移动, 最后遍历最右边.

(提示:左子树指向结点,结点指向右子树,记得将结点下的左子树遍历完,才能遍历到结点)

图解:

image.png

后序遍历:(左右根)

过程:

1.后序遍历其左子树;

2.后序遍历其右子树;

3.访问根结点。 (提示:左子树遍历完,再遍历右子树,并在每个结点遍历时都要重复其操作) 图解:

image.png

相关练习:

1.已知一颗二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为?

image.png

答案:后序遍历结果:CBEFDA

2.已知一颗二叉树的后序遍历结果为DABEC,中序遍历结果为DEBAC,则前序遍历的结果为?

image.png 答案:前序遍历结果:CEDBA

3.已知一颗二叉树的中序遍历结果为ABCDEFG,后序遍历结果为BDCAFGE,则前序遍历的结果为?

image.png

答案:前序遍历结果:EACBDGF

4.已知一颗二叉树的前序遍历结果为ABCDEFGH,中序遍历结果为CBEDFAGH,请画出该二叉树?

image.png

5.已知一颗二叉树的前序遍历结果为ABDGJEHCFIKL,中序遍历结果为DJGBEHACKILF,则后序遍历的结果为?

image.png

答案:后序遍历结果:JGDHEBKLIFCA