前缀,中缀,后缀的遍历

来源:互联网 发布:尔雅网络课程登录网址 编辑:程序博客网 时间:2024/04/28 15:50

一、表达式与二叉树的关系

前缀表达式对应于二叉树的前序遍历;

中缀表达式对应于二叉树的中序遍历;

后缀表达式对应于二叉树的后序遍历;

 

二、根据中缀表达式生成二叉树

中缀表达式:a + b * (c - d) - e / f

中序遍历为:左儿子、右儿子、根节点

按照操作符的优先级,其二叉树生成过程为:

1. c-d的优先级高,根是-操作符,c和d分别为左右儿子

       -

     |    |

     c  d

2.接下来是乘法,根是*操作符,b和1中的内容分别是左右儿子

      *

   |       |

  b       -

          |  |

         c d

3.接下来是触发,根是/操作符,e和f分别是左右儿子

          /

          |  |

         e f

4.接下来是加法,根是+操作符,a和2中的内容分别是左右儿子

   +  

 |     |

a     *

       |       |

       b       -

                |  |

               c d

还包括3中的那棵树。

5.  接下来是减法,根是-操作符,4中的两棵树分别是左右儿子

                 -

     |                           |

   +                           /

 |     |                     |    |

a     *                    e  f

       |       |

       b       -

                |  |

               c d 

 

三、根据二叉树前序遍历得到前缀表达式

前序遍历为:根节点、左儿子、右儿子

得到前缀表达式为:- + a * b - cd / ef

 

四、根据二叉树后序遍历得到后缀表达式

后序遍历为:左儿子、右儿子、根节点

得到后缀表达式为:abcd - * + ef / -

 

五、小结

若可以根据前缀、中缀、或后缀表达式确定一颗二叉树,则可以生成相应的前缀、中缀、后缀表达式。

前序遍历、中序遍历、后续遍历的结义方法:

1. 前序就是根节点在前边,中序就是根节点在中间,后续就是根节点在后边

2. 总是先左儿子,再右儿子。

前序:根节点、左儿子、右儿子

中序:左儿子、根节点、右儿子

后续:左儿子、右儿子、根节点