前缀、中缀、后缀表达式与二叉树的前序、中序、后序遍历
2010-06-18 10:32
671 查看
一、表达式与二叉树的关系
前缀表达式对应于二叉树的前序遍历;
中缀表达式对应于二叉树的中序遍历;
后缀表达式对应于二叉树的后序遍历;
二、根据中缀表达式生成二叉树
中缀表达式: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. 总是先左儿子,再右儿子。
前序:根节点、左儿子、右儿子
中序:左儿子、根节点、右儿子
后续:左儿子、右儿子、根节点
前缀表达式对应于二叉树的前序遍历;
中缀表达式对应于二叉树的中序遍历;
后缀表达式对应于二叉树的后序遍历;
二、根据中缀表达式生成二叉树
中缀表达式: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. 总是先左儿子,再右儿子。
前序:根节点、左儿子、右儿子
中序:左儿子、根节点、右儿子
后续:左儿子、右儿子、根节点
相关文章推荐
- 前序 中序 后序 遍历二叉树 - 前缀 中缀 后缀 表达式
- 前缀、中缀、后缀表达式与二叉树的前序、中序、后序遍历
- 前缀、中缀、后缀表达式与二叉树的前序、中序、后序遍历
- 前序 中序 后序 遍历二叉树 - 前缀 中缀 后缀 表达式
- 前序 中序 后序 遍历二叉树 - 前缀 中缀 后缀 表达式
- 前缀、中缀、后缀表达式与二叉树的前序、中序、后序遍历
- 二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出
- 前缀、中缀、后缀表达式和二叉树
- 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
- 二叉树前序,中序,后序遍历迭代实现详解
- C++编写数据结构中的二叉树(前序,中序,后序遍历)
- 前序创建二叉树+ 前序/中序/后序遍历二叉树
- 二叉树前序,中序,后序遍历详解
- 二叉树的前序,中序,后序和层序遍历java实现
- 二叉树的创建、先序、中序、后序遍历
- 二叉树构建,先序,中序,后序遍历(以及非递归实现),广度优先遍历
- 输入前序/后序+中序 遍历结果重建二叉树(递归)
- 二叉树的建立和中序、先序、后序遍历
- 温习二叉树的建立和先序 中序 后序遍历 嵌套
- 用递归方法对二叉树进行先序、中序和后序遍历