package ExpressionTree;
import TraverseTree.TNode;
import java.util.Stack;;
/**
* 表达式树
*/
public class ExpTree {
/**表达式树的构建*/
public static TNode<Character> buildExpTree(String postfixExp) {
char c;
TNode<Character> newNode, newLeft, newRight;
Stack<TNode<Character>> s = new Stack<TNode<Character>>();
int i = 0, len = postfixExp.length();
while(i != len) {
while(postfixExp.charAt(i) == ' ' || postfixExp.charAt(i) == '\t')
i++;
if(i == len)
break;
c = postfixExp.charAt(i);
i++;
if(c == '+' || c == '-' || c == '*' || c == '/') {
newRight = s.pop();
newLeft = s.pop();
newNode = new TNode<Character>(c, newLeft, newRight);
s.push(newNode);
} else {
newNode = new TNode<Character>(c);
s.push(newNode);
}
}
if(! s.isEmpty())
return s.pop();
else
return null;
}
/**中序输出*/
public static <T> void inorderOutput(TNode<T> t) {
if (t != null) {
inorderOutput(t.left);
System.out.print(t.nodeValue + " ");
inorderOutput(t.right);
}
}
public static void main(String[] args) {
String exp = "abc*+";
TNode<Character> root = ExpTree.buildExpTree(exp);
ExpTree.inorderOutput(root); // a + b * c
}
}
分享到:
相关推荐
这个"JS-expression-binary-tree.zip"压缩包文件包含了与构建表达式二叉树相关的资源,可能包括源代码、示例和解释文档,适用于浙江理工大学的数据结构课程。 首先,我们需要理解什么是表达式二叉树。表达式二叉树...
例如,二叉搜索树(Binary Search Tree)的中序遍历可以用于快速查找和排序;在编译器中,表达式树的前序遍历常用于求解表达式的值;在文件系统中,后序遍历可以用来拷贝或删除整个目录结构。 掌握二叉树遍历不仅有...
在实际应用中,二叉树遍历有多种用途,例如构建表达式树、解决迷宫问题、文件系统目录结构的遍历等。通过RS005二叉数后序遍历、RS005二叉数中序遍历和RS005二叉数前序遍历的学习,你可以掌握如何实现这些遍历方法,...
后序遍历常用于计算表达式树或释放内存时。 计算树的高度是另一个重要的操作。树的高度是指从根节点到最远叶节点的最长路径上的边数。可以使用递归算法,分别计算左子树和右子树的高度,取两者中的较大值加一作为树...
后序遍历常用于计算表达式树的值。 二叉树的应用广泛,包括但不限于以下几点: 1. 文件系统:操作系统中的目录结构可看作一棵二叉树,根节点代表根目录,子节点代表子目录或文件。 2. 搜索引擎:二叉搜索树(BST)...
在实际应用中,二叉树遍历常用于搜索、排序、构建表达式树、树的复制以及数据结构的序列化和反序列化等问题。通过理解并熟练掌握这三种遍历方法,开发者能够更好地处理涉及二叉树的各种问题,从而提高代码的效率和...
在给定的标题“BitTree_mirror_树_数据结构_mirror遍历_MirrorMirror_”中,主要涉及了两个关键概念:二叉树(Binary Tree)和镜像遍历(Mirror Traversal)。接下来,我们将深入探讨这两个知识点。 二叉树是一种...
例如,如果元素集合已经按照某种顺序(如升序或降序)给出,我们可以创建一个二叉搜索树(Binary Search Tree, BST),其中每个节点的左子树包含所有小于它的元素,右子树包含所有大于它的元素。对于递归建立二叉树...
在实际应用中,二叉树遍历可以用来解决很多问题,例如构建表达式树、搜索数据、构建文件系统目录结构等。掌握二叉树的遍历算法是理解数据结构和算法基础的重要部分,对提升编程能力和解决复杂问题的能力有显著帮助。...
后序遍历常用于计算表达式树的结果或释放二叉树的动态内存。 深度优先搜索的优点在于其空间效率,因为它通常只需要一个较小的栈来存储当前路径。然而,DFS可能会导致较深的递归,对栈空间的需求可能较大。 与DFS...
本资源“leetcode_practices_learncard_binarytree”是一份全面的二叉树学习卡片,作者通过Java8语言完成了所有相关题目,旨在帮助学习者深入理解二叉树及其相关算法。 一、二叉树基础 二叉树是一种非线性数据结构...
29. Convert Sorted Array to Balanced Binary Search Tree:将有序数组转换成平衡的二叉搜索树。 30. Convert Sorted List to Balanced Binary Search Tree:将有序链表转换成平衡的二叉搜索树。 31. Binary Tree ...
"Chap4_BinaryTree"可能包含了以上操作的实现,以及可能的扩展练习或案例分析。通过学习和理解这些代码,可以深入理解二叉树的性质和操作,提升编程能力。如果你需要具体代码实现或更深入的解释,请查阅"Chap4_...
例如,前序遍历常用于复制一棵树,中序遍历在二叉搜索树中可以得到有序序列,后序遍历则常用于计算表达式树等。 3. **遍历的实现** 遍历二叉树可以通过递归和非递归两种方式实现。递归方式简单直观,但会增加函数...
8. **二叉搜索树(Binary Search Tree, BST)**: - 中序遍历二叉搜索树会得到一个有序序列。 - 先序遍历二叉搜索树的结点顺序不能确定,因为左右子树的遍历顺序可能不同。 9. **结点编号与孩子关系**: - 在...
这些遍历方法各有其应用场景,例如在构建表达式树、查找特定模式或复制树结构时会用到。 1. 前序遍历:根节点 -> 左子树 -> 右子树 2. 中序遍历:左子树 -> 根节点 -> 右子树 3. 后序遍历:左子树 -> 右子树 -> 根...
class BinaryTree { constructor(root) { this.root = root; } preorder() { // 实现前序遍历的代码 } inorder() { // 实现中序遍历的代码 } postorder() { // 实现后序遍历的代码 } } ``` 在`...
- **中序表达式** (1130 Infix Expression): 与表达式树有关,需要理解前序、中序、后序遍历。 - **Z型层序遍历** (1127 ZigZagging on a Tree): 树的遍历技巧,结合层序遍历和中序遍历的变形。 - **前后序遍历**...
- **二叉树的层序遍历(Binary Tree Level Order Traversal)**: 给定一棵二叉树,返回其层序遍历的结果。 - **对称树(Symmetric Tree)**: 判断一个二叉树是否是对称的。 - **相同的树(Same Tree)**: 判断两个二叉树...
1. 二叉树遍历详解:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbian-2/ 2. BFS算法框架详解:...