`

二叉树实现复杂运算

    博客分类:
  • JAVA
阅读更多

 

                                                  二叉树

        树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。满二叉树,完全二叉树,排序二叉树。

  利用二叉树,我们可以实现计算器的复杂运算,一下代码仅支持单数字运算,多位还需要添加判断语句。

package twotree;

public class Node {
	Node left;
	Node right;
	Node parent;
	int data;
	String str;
}

 以上是我们定义的的树左节点,右节点,父节点,数据,及符号
接下来就是关键代码:

 

 

 

public class Tree {
	Node root;//定义根节点
	public void add(String str,int data){
		Node node=new Node();//创建一个新结点
		node.data=data;//接受加入数据
		node.str=str;//接受加入数据
		//判断如果根节点为空
		if(root==null){
			//第一个添加的节点为根
			root=node;
		}
		else{
			if(root.parent==null){
				//父节点为空,指向node
				root.parent=node;
				//将node的左节点插入到root上
				node.left=node;
				
			}
		
		else{
			//右节点为空,指向node
			root.parent.right=node;
			//将根节点指向父节点,将root节点向上移动一层
			root=root.parent;
		}
	}

	}
	public int cal(Node node){
		//如果节点不为空,右节点不为空
		if(node!=null&&node.right!=null){
			//判断运算符
			if(node.str.equals("-")){
				//调用递归函数
				return cal(node.left)-node.right.data;
			}
			if(node.str.equals("+")){
				//调用递归函数
				return cal(node.left)+node.right.data;
			}
		}
		else{
			//如果左节点为空,就返回当前元素
			if(node.left==null){
				return node.data;
			}
		}
		return 0;
	}
	
	//打印树
	public void printTree(){
		//定义节点指向根节点
		Node temp=root;
		//当节点不为空
		while(temp!=null){
			//打印节点所带的运算符和计算的数字
			System.out.print("str="+temp.str+",data="+temp.data);
			//父节点不为空时
			if(temp.parent != null){
				//父节点右子树不为空时
				if(temp.parent.right != null){
					System.out.print(" right:str="+temp.parent.right.str+",data="+temp.parent.right.data);
				}
			}
			System.out.println();
			temp=temp.left;//下移节点到左边
			
		}
	}
	public static void main(String args[]){
		//实例化一个树的对象
		Tree tree=new Tree();
		//定义复合运算
		String str="1+4-5-8+9-5";
		//得到每一个字符
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			if(c=='+'||c=='-'){
				tree.add(""+c, 0);
			}
			else{
				//将数字转化为字符型
				tree.add("", Integer.parseInt(""+c));
			}
		}
		//打印树
		tree.printTree();
		//输出计算结果
		System.out.println(tree.cal(tree.root));
	}
}

 出来结果如下:

 

 

  • 大小: 5.4 KB
  • 大小: 2.4 KB
分享到:
评论

相关推荐

    递归算法实现二叉树的各种运算

    在本主题中,我们将深入探讨如何使用递归算法来实现二叉树的各种运算,主要关注前序、中序、后序遍历,层次遍历,以及特定的二叉树操作,如删除叶子节点、复制二叉树和交换左右子树。 首先,让我们了解递归的概念。...

    利用二叉树实现多项式计算

    标题“利用二叉树实现多项式计算”明确指出本文将探讨如何通过构建二叉树来实现对多项式的运算处理。 #### 描述解读: 描述部分提到该资源为txt文本,内容包括实现思路与具体代码实现,仅供学习参考使用,不得用于...

    实现二叉树各种基本运算源程序.docx

    根据提供的文件信息,“实现二叉树各种基本运算源程序.docx”主要涉及的是二叉树这一数据结构的基本操作实现。二叉树是一种非常重要的非线性数据结构,在计算机科学领域有着广泛的应用,如搜索算法、排序算法等。...

    C++ 二叉树实数四则计算器

    该计算器基于二叉树结构,利用了堆栈、二叉树、递归和队列等数据结构,实现了高效且准确的计算过程。 **一、二叉树在表达式解析中的应用** 二叉树是一种重要的数据结构,它的每个节点最多有两个子节点。在处理算术...

    二叉树的基本操作C语言实现

    在C语言中实现二叉树的基本操作需要理解二叉树的特性,并掌握相应的编程技巧。以下是对二叉树及其C语言实现的详细说明。 首先,二叉树是由节点构成的,每个节点包含两个子节点,分别称为左子节点和右子节点。二叉树...

    二叉树的基本运算算法c++

    本教程将深入探讨如何在C++中实现二叉树的基本运算算法。 首先,我们需要定义一个二叉树节点的结构体。在C++中,这通常包括两个指针,分别指向左子节点和右子节点,以及存储节点值的数据成员。例如: ```cpp ...

    交换二叉树左右子树的运算

    在实际应用中,我们需要根据二叉树的大小、深度以及对空间和时间复杂性的要求来选择合适的实现方式。例如,如果二叉树较深,递归可能会导致调用栈溢出,此时迭代方法可能更优。而在某些情况下,如内存有限,递归方法...

    mfc二叉树的实现,涉及到增加节点等运算

    在实际编程中,二叉树的实现可能会更复杂,特别是当考虑线程安全、内存管理和错误处理时。然而,上述代码片段为理解MFC框架下二叉树的基本实现提供了一个起点。通过熟练掌握这些概念和技巧,开发者能够更好地解决...

    二叉树及其运算.pdf

    这篇实验报告主要涉及的是数据结构中的二叉树概念及其操作,特别...通过这样的实践,学生能够更好地理解二叉树的逻辑结构和非递归算法的应用,这对未来的IT职业生涯至关重要,特别是在需要处理复杂数据结构的问题时。

    二叉树的应用-代数表达式实现实验报告

    本次实验报告聚焦于**二叉树的应用-代数表达式实现**,旨在深入理解二叉树如何用于表示和计算复杂的数学表达式。二叉树作为一种基本的数据结构,在计算机科学中扮演着至关重要的角色,特别是在处理具有层次关系的...

    二叉树需要的的5个基本操作运算

    本文将深入探讨与标题"二叉树需要的5个基本操作运算"相关的知识,以及如何使用C语言实现这些操作。 首先,我们来理解二叉树的基本概念。二叉树是由n(n&gt;=0)个有限节点组成的一个有穷集合,这些节点通过一对一的...

    二叉树基本操作,实现表达式计算

    利用二叉树实现表达式计算的关键在于正确地构建表达式的语法树,并对这棵树进行后序遍历。后序遍历的顺序是先遍历左子树,再遍历右子树,最后访问根节点,这样可以确保在访问到运算符时,其左右操作数已经被计算出来...

    实现二叉平衡树的相关运算算法

    实现二叉平衡树的相关运算算法。并在此基础上完成如下功能:1、由{4,9,0,1,8,6,3,5,2,7}创建一颗AVL树b并以括号表示输出。2、在b中分别删除关键字为8和2 的结点,并以括号表示法输出删除后的AVL树

    c++数据结构二叉树所有功能的源码

    “BitTree”可能是压缩包内的源码文件名,可能表示这是一个关于位运算或者基于位的二叉树实现,这在处理大规模数据或者内存有限的场景下特别有用,因为位操作通常比常规操作更高效。 总结来说,这个资源提供了一个...

    数据结构实验三——二叉树基本操作及运算实验报告.docx

    2. **遍历二叉树**:实现了四种遍历方法:先序遍历(根-左-右)、中序遍历(左-根-右)、后序遍历(左-右-根)以及层次遍历(从根开始,逐层遍历)。例如,输入数据对应的遍历结果分别是先序:ABCDEGF,中序:...

    表达式二叉树的操作

    表达式二叉树,也称为运算符树或操作符树,是一种特殊的二叉树结构,主要用于表示数学表达式。在计算机科学中,特别是在...在理解和实现过程中,对数据结构和算法的理解是非常重要的,特别是在解决复杂计算问题时。

    表达式求值,用二叉树

    使用二叉树来表示和求解表达式,不仅简化了表达式的解析过程,提高了计算效率,还便于理解和实现更复杂的数学表达式求值算法。通过对表达式的合法性检查、构建二叉树、遍历和求值等步骤的详细说明,我们可以深入理解...

    有值二叉树

    有值二叉树(Value Binary Tree)是二叉树的一种具体实现形式,它要求每个节点不仅包含指向左右子节点的指针,还必须包含一个实际的数值或数据信息。这种数据结构能够有效地支持各种基于数值的操作,如查找最大值/...

    二叉树的先序中序后序遍历

    二叉树是一种特殊的树...无论是简单的数据组织还是复杂的算法实现,掌握这些基本的遍历方法都能极大地提升你的编程能力。在MFC环境下,你可以利用C++的灵活性来实现这些功能,为你的应用程序添加强大的数据结构支持。

Global site tag (gtag.js) - Google Analytics