此代码乃本人亲手制作,特点是绝对清纯,用到了大学时的递归遍历二叉树的知识,热爱计算机的同学可以看一看,给点意见。
Node.java
class Node
{
private String name;
private Node leftChild;
private Node rightChild;
public Node(String name)
{
this.name = name;
}
public void output()
{
System.out.print(name + "-->");
}
public Node getLeft()
{
return leftChild;
}
public void setLeft(Node leftChild)
{
this.leftChild = leftChild;
}
public Node getRight()
{
return rightChild;
}
public void setRight(Node rightChild)
{
this.rightChild = rightChild;
}
public String getName()
{
return name;
}
}
BinaryTree.java
class BinaryTree
{
private Node root;
private static Node pp;
public Node getRoot()
{
return root;
}
private boolean iterateCompare(Node p, String name)
{
// 插入节点前先遍历一下二叉树查看有没有该父节点
if (p.getLeft() != null && iterateCompare(p.getLeft(), name))
{
return true;
}
if (p.getName().equals(name))
{
BinaryTree.pp = p;
return true;
}
if (p.getRight() != null && iterateCompare(p.getRight(), name))
{
return true;
}
return false;
}
// 中序遍历输出
public void inOrderIterateOutput(Node p)
{
if (p.getLeft() != null)
{
inOrderIterateOutput(p.getLeft());
}
p.output();
if (p.getRight() != null)
{
inOrderIterateOutput(p.getRight());
}
}
// 先序遍历输出
public void preOrderIterateOutput(Node p)
{
p.output();
if (p.getLeft() != null)
{
preOrderIterateOutput(p.getLeft());
}
if (p.getRight() != null)
{
preOrderIterateOutput(p.getRight());
}
}
// 后序遍历输出
public void postOrderIterateOutput(Node p)
{
if (p.getLeft() != null)
{
postOrderIterateOutput(p.getLeft());
}
if (p.getRight() != null)
{
postOrderIterateOutput(p.getRight());
}
p.output();
}
public void initialize()
{
root = new Node("root");
}
public boolean addNode(String parent, String flag, String name)
{
if (!(flag.equals("L") || flag.equals("R")))
{
return false;
}
if (iterateCompare(root, parent))
{// 找到有该节点
if (flag.equals("L") && BinaryTree.pp.getLeft() == null)
{
BinaryTree.pp.setLeft(new Node(name));
return true;
}
else if (flag.equals("R") && BinaryTree.pp.getRight() == null)
{
BinaryTree.pp.setRight(new Node(name));
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
Test.java
class Test
{
public static void main(String[] args)
{
BinaryTree bt = new BinaryTree();
bt.initialize();
if (bt.addNode("root", "L", "A"))
{
System.out.println("添加root--L-->A成功");
}
if (bt.addNode("root", "R", "B"))
{
System.out.println("添加root--R-->B成功");
}
if (bt.addNode("A", "L", "C"))
{
System.out.println("添加A--L-->C成功");
}
if (bt.addNode("B", "L", "D"))
{
System.out.println("添加B--L-->D成功");
}
if (bt.addNode("B", "R", "E"))
{
System.out.println("添加B--R-->E成功");
}
System.out.println("中序遍历");
bt.inOrderIterateOutput(bt.getRoot());
System.out.println("\n先序遍历");
bt.preOrderIterateOutput(bt.getRoot());
System.out.println("\n后序遍历");
bt.postOrderIterateOutput(bt.getRoot());
}
}
输出结果:
添加root--L-->A成功
添加root--R-->B成功
添加A--L-->C成功
添加B--L-->D成功
添加B--R-->E成功
中序遍历
C-->A-->root-->D-->B-->E-->
先序遍历
root-->A-->C-->B-->D-->E-->
后序遍历
C-->A-->D-->E-->B-->root-->
分享到:
相关推荐
典型化工介质腐蚀数据和选材表(郭峰杰).xls
郭峰卿论文-论文.zip
"04郭峰布置合理的作业.docx" 文件中的内容强调了如何通过有效的作业设计,避免让学生做无用功,同时鼓励他们自我管理和自主学习。以下将详细探讨这些关键点。 首先,有效的作业应当能够促进学生的深度学习。这意味...
《深入浅出设计模式》是郭峰所著的一本经典设计模式教程,旨在帮助开发者深入理解和应用设计模式。这本书的代码总结提供了丰富的实例,涵盖了多种UML图表,并且包括了一个完整的博客项目,该项目包含了SQL文件,便于...
高分子电光材料在THz辐射源领域的研究进展_郭峰.caj
中国数字普惠金融指标体系与指数编制 - 北大国家发展研究院_郭峰.pdf
迭代器模式提供了一种遍历集合元素的方法,而无需暴露其底层表示;命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求或者支持撤销操作;备忘录模式在不破坏封装性的前提下,捕获一个对象的...
本文针对冰致直立结构的振动问题,提出了两种理论模型:强迫振动理论和自激振动理论,并通过实际观测和实验数据分析证明了冰致直立结构稳态振动及频率锁定现象应属于自激振动。为了更深入理解冰致振动的物理机制,...
设计模式是软件开发中的一种最佳实践,是解决常见问题的模板,能够提高代码的可读性、可维护性和复用性。这本书通过深入浅出的方式,使得复杂的概念变得易于理解。 在设计模式的世界里,我们可以将其大致分为三类:...
同时,系统设有两种用户类型——普通用户和管理员用户,前者只能查看和操作自己权限范围内的数据,后者则拥有系统的所有管理权限,包括对其他用户的管理。 2. **货物管理**:货物管理模块是库存系统的核心,它负责...
在库存管理系统中,C#提供了丰富的类库和强大的编程工具,使得开发人员能够快速构建功能丰富的用户界面和稳定的后台逻辑。 SQL Server数据库是微软公司的关系型数据库管理系统,具有高可用性、高性能和易管理性。在...
接着,进行了系统架构设计,通常采用MVC(Model-View-Controller)模式,将业务逻辑、数据展示和用户交互分离,以提高代码的可维护性和可扩展性。 在实现阶段,主要使用了以下技术栈: 1. **Java语言**:作为后端...
第二期和第三期指数(2016-2020)课题组成员包括:郭峰、王靖一、王雪、程志云、李勇国、王芳。课题组也获得了北京大学和蚂蚁集团多位同事的技术支持。 3、指数属性:这套指数包括数字普惠金融指数,以及数字金融...
于监管和公司数据安全审核等方面的原因,2019和2020年的信用和货币基金分指数 ,没有对外公布。 4、指数范围:中国内地31个省(直辖市、自治区,简称“省”)、 337个地级以上城市(地区、自治州、盟等,简称“城市...
于监管和公司数据安全审核等方面的原因,2019和2020年的信用和货币基金分指数 ,没有对外公布。 4、指数范围:中国内地31个省(直辖市、自治区,简称“省”)、 337个地级以上城市(地区、自治州、盟等,简称“城市...
第二期和第三期指数(2016-2020)课题组成员包括:郭峰、王靖一、王雪、程志云、李勇国、王芳。课题组也获得了北京大学和蚂蚁集团多位同事的技术支持。 3、指数属性:这套指数包括数字普惠金融指数,以及数字金融...
中心和蚂蚁金服集团组成的联合课题组负责编制,课题组顾问由北京大学数字金融研究中心 主任黄益平,蚂蚁金服集团副总裁梁世栋担任。第一期指数(2011-2015)课题组 成员包括:郭峰、孔涛、王靖一、张勋、程志云、阮...
2、课题组:本指数由北京大学数字金融研究中心和蚂蚁科技集团研究院组成的联合课题组负责编制,课题组顾问包括北京大学数字金融研究中心主任黄益平,蚂蚁集团研究院院长李振华。第一期指数(2011-2015)课题组成员...
2、课题组:本指数由北京大学数字金融研究中心和蚂蚁科技集团研究院组成的联合课题组负责编制,课题组顾问包括北京大学数字金融研究中心主任黄益平,蚂蚁集团研究院院长李振华。第一期指数(2011-2015)课题组成员...