1.此篇文章,仅作为《数据结构与算法分析》第四章--树
中的二叉树一节的读书笔记,发出来供大家共同学习。
2.在开始之前,极力向大家推荐Google Docs. 并非做广告,而是google的产品,不得不让人喜欢。 本文中的插图就是用google docs中的编辑器画的。 很好用。 大家可以试一试
3.本文使用图片方式记录,结合图片与文字,能更加容易理解。 文中涉及到 后缀表达式,关于此方面的内容,可以参考我之前的读书笔记 -- 数据结构与算法分析 读书笔记 --栈的应用
4.最后附上,本文中示例。 树表达式的简单实现代码, 由于数据结构整处于学习中,难免代码丑陋,请更位牛人拍砖,赐教。
关于树的一些基本概念的图片(虽丑陋,但是本人一笔笔画的):
关于此实例的代码:
package com.base.tree;
import java.util.Stack;
public class MyTreeTest {
public static void main(String[] args) {
MyStack mystack=new MyStack();
MyTree tree=mystack.postfixhandler("ab+cde+**");
MyTree.preorder(tree);//先序输出
}
}
class MyTree {
private String data;
private MyTree left;
private MyTree right;
public MyTree(String data) {
this.data = data;
}
public void setLeft(MyTree left) {
this.left = left;
}
public void setRight(MyTree right) {
this.right = right;
}
public MyTree getLeft() {
return left;
}
public MyTree getRight() {
return right;
}
public String getData() {
return data;
}
/**
* 先序遍历 左-中-右
*/
public static void preorder(MyTree tree){
if(tree==null)return;
System.out.println(tree.getData());
preorder(tree.getLeft());
preorder(tree.getRight());
}
/**
* 后序遍历 左-右-中(data)
*/
public static void postorder(MyTree tree){
if(tree==null)return;
postorder(tree.getLeft());
postorder(tree.getRight());
System.out.println(tree.getData());
}
/**
* 中序遍历 左-中-右
*/
public static void inorder(MyTree tree){
if(tree==null)return;
postorder(tree.getRight());
System.out.println(tree.getData());
postorder(tree.getLeft());
}
}
class MyStack {
/**
* 后缀表达式处理方法
*
* @param postfix
*/
public MyTree postfixhandler(String str) {
Stack<MyTree> result = new Stack<MyTree>();// 栈对象
for (int i = 0; i < str.length(); i++) {
// 是否为运算符
if ("+-*/".indexOf(str.charAt(i) + "") == -1) {
result.push(new MyTree(str.charAt(i) + ""));
} else {
// 栈为空,则无法后续操作
if (!result.isEmpty()) {
// 将之前的树出栈,构造新的树,并入栈操作
MyTree root = new MyTree(str.charAt(i) + "");
root.setRight(result.pop());
root.setLeft(result.pop());
result.push(root);
}
}
}
return result.pop();
}
}
最后输出结果:
*
+
a
b
*
c
+
d
e
- 大小: 38 KB
- 大小: 43.4 KB
分享到:
相关推荐
数据结构课程设计报告-二叉树的遍历 本报告基于二叉树的遍历方法,旨在通过递归和非递归两种方法创建一棵二叉树,并对其进行先序遍历、中序遍历、后序遍历及层次遍历,并求出该二叉树的深度和叶子结点数。同时,...
本资源"数据结构与算法分析--C语言描述"是针对数据结构初学者的一个优秀教材,旨在帮助读者快速掌握这一领域。 首先,数据结构是组织和存储数据的方式,它决定了数据的访问效率和处理速度。常见的数据结构包括数组...
通过阅读《算法-理论基础- 二叉树- 二叉树的遍历(包含源程序).pdf》这份文档,你将能够深入理解二叉树遍历的概念,并有机会通过实际的源代码加深理解,从而更好地掌握这个重要的数据结构和算法知识。在学习过程中...
数据结构课程设计报告的核心主题是实现最短路径算法,结合二叉树的三种遍历方法。这份报告由赖恒财同学完成,指导教师为董跃华,属于计算机科学与技术专业的一个项目。以下是对报告中涉及知识点的详细说明: 1. **...
在算法分析中,二叉树的数学理论对于某些最有启发性的应用是与给出用于计算各种类型中不同树的数目的公式有关的。因此,二叉树在计算机科学中扮演着非常重要的角色。 本文对二叉树以及二叉树的各种功能做介绍,以及...
二叉树作为数据结构的一种,具有重要的理论和实际应用价值。本程序旨在通过实现二叉树的创建、遍历、查找以及删除等基本操作,帮助学生深入理解和掌握二叉树的相关知识。 首先,我们要理解什么是二叉树。二叉树是一...
这些算法是理解和操作二叉树所必需的知识点,广泛应用于数据结构与算法的学习和实际编程中。 1. **前序遍历**(Preorder Traversal): 前序遍历的顺序是根节点 -> 左子树 -> 右子树。首先访问根节点,然后递归地...
数据结构与算法分析是软件工程专业的核心课程,旨在培养学生对数据结构和算法的理解和应用能力。本考试大纲涵盖了数据结构和算法分析的基本概念、逻辑结构、存储结构、算法设计和分析、数据处理原理和方法等方面的...
通过以上分析,我们可以看到,非递归的前序遍历不仅避免了递归可能带来的栈溢出问题,而且通过巧妙利用栈的数据结构,能够有效地实现二叉树的遍历。这一方法在处理大规模数据或深度较大的二叉树时尤为有用。在实际...
* 能够选择合适的数据结构和方法进行问题求解,具备采用C++语言设计与实现算法的能力。 二、考试内容及考试要求 第一章、数据结构和算法的基本概念 * 了解数据结构的基本概念,包括逻辑结构、物理结构、两者的...
二叉树遍历算法是计算机科学中的一种基本数据结构操作,尤其在处理树形数据结构时至关重要。二叉树是一种每个节点最多有两个子节点(通常称为左子节点和右子节点)的数据结构,广泛应用于搜索、排序、编译器设计等...
二叉树是一种非线性数据结构,在计算机科学领域应用广泛,尤其是在算法设计与分析方面。通过本实验,学生将深入理解二叉树的基本概念、性质及其在计算机中的实现方式。 #### 二叉树基础 **二叉树定义**:二叉树是...
01-001数据结构的概念和基本术语、抽象数据类型的表示与实现 01-002算法设计的要求、算法效率的度量 02-001线性表的类型定义 02-002线性表的顺序表示与实现、线性表的基本操作 02-003单链表的创建与操作、加工型...
"数据结构实验报告-二叉树的实现与遍历" 一、实验内容 在本实验中,我们将使用二叉树链表作为存储结构,实现二叉树的建立、遍历和各种操作。二叉树是一种常用的数据结构,它可以用来存储和查询大量数据。我们的...
在数据结构的学习中,二叉树是一种非常重要的概念,它是一种特殊的树形数据结构,每个节点最多只有两个子节点,通常分为左子节点和右子节点。本项目着重探讨了二叉树的各种遍历算法以及如何将普通树转换为二叉树,并...
本课件“数据结构课件---二叉树”深入浅出地讲解了二叉树的基础概念、存储方式、遍历方法以及非递归算法的应用。 一、二叉树定义 二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常分为左子节点...
本程序可以应用于数据结构课程设计,帮助学生更好地理解二叉树的遍历算法。用户可以输入二叉树的结点,并选择遍历的方式,程序将输出遍历结果和叶子结点的个数。 五、结论 本文详细讲解了二叉树的遍历的实现,包括...
《数据结构与算法分析-C语言描述》是一本深入解析数据结构和算法的权威书籍,它以其清晰的C语言实现和深刻的算法分析而受到广大程序员和计算机科学学生的喜爱。该书覆盖了众多重要的数据结构,如数组、链表、栈、...
根据给定的信息,我们可以分析并总结出关于二叉树这一数据结构的相关知识点: ### 一、二叉树定义 二叉树是一种常见的非线性数据结构,它具有以下特点: - 每个节点最多有两个子节点:左子节点(left child)和右...