zoukankan      html  css  js  c++  java
  • 二叉树前中后序与表达式的延伸

    今天给大家讲一讲理论知识

     二叉树之前中后序

    二叉树基本定义

    直白的讲,二叉树只由三部分组成:根,左子树,右子树

    但是,每个左子树与右子树同样也可以把自己看作根,因此,他们也有自己的左子树与右子树

    注:左子树与右子树可以为空气 

    二叉树前中后序

    前中后序是三种遍历二叉树不同的方式

    前序顺序:根 左 右

    中序顺序:左 根 右

    后序顺序:左 右 根

    下面举个例子:

              图片转载自风一样的码农的博客

    这个例子的三种顺序分别是:

      前序:124563

      中序:425613

      后序:465231

    前中后序在表达式中的使用

    表达式分为前中后缀形式

    其中,前中后缀形式等同于二叉树的前中后序

    首先,人的大脑是中序,因此,我们可以将表达式通过二叉树的形式表现出来,然后再求此表达式的其他形式。

    举个例子:

              

    此表达式在我们人脑中应是(中序):A+B*[C-(D+F)]/E

    前序:+A/*B-C+DFE

    后序:ABCDF+-*E/+

    计算机怎样求表达式

    计算机很死板,它不可能看得懂我们人类的括号。

    因此,计算机只能讲我们人类的中缀表达式改成后缀表达式,

    然后,将他们从前往后放入栈中,如果入栈的是符号,则弹出它即比它早进栈的两位并将它们和刚入栈的符号进行运算,然后将结果放入栈。

    还用刚刚的例子:ABCDF+-*E/+

    设一个栈a,弹入与弹出过程如下:

       1.A

       2.A B  弹入字母,不进行操作

       3.A B C

       4.A B C D

       5.A B C D F

       6.A B C D F +   弹入“+”,弹出“+”,“D”,“F”,并求出D+F然后重新弹入结果

       7.A B C D+F -   弹入“-”,弹出“-”,“C”,“D+F”,并求出C-(D+F)然后重新弹入结果

       8.A B C-(D+F)  *   弹入“*”,弹出“*”,“B”,“C-(D+F)”,并求出B*[C-(D+F)]然后重新弹入结果

       9.A  B*[C-(D+F)] E

       10.A  B*[C-(D+F)] E /    弹入“/”,弹出“/”,“B*[C-(D+F)]”,“E”,并求出B*[C-(D+F)]/E然后重新弹入结果

       11.A  B*[C-(D+F)]/E +   弹入“+”,弹出“+”,“A”,“B*[C-(D+F)]” ,并求出A+B*[C-(D+F)]然后重新弹入结果 

    运算结果为最终栈中的A+B*[C-(D+F)]

    计算机通过后缀形式可以算出表达式

    如果您觉得此博客还不错,别忘记点赞+关注          

  • 相关阅读:
    DNS 访问 Service【转】
    Service IP 原理【转】
    通过 Service 访问 Pod【转】
    定时执行 Job【转】
    并行执行 Job【转】
    Job 失败了怎么办?【转】
    用 k8s 运行一次性任务【转】
    运行自己的 DaemonSet【转】
    python之路——递归函数
    尝试加载 Oracle 客户端库时引发 BadImageFormatException
  • 原文地址:https://www.cnblogs.com/Ryan-juruo/p/11601328.html
Copyright © 2011-2022 走看看