JAVA二叉树的基本操作

网友投稿 269 2022-12-15

JAVA二叉树的基本操作

目录记录二叉树的基本操作DEMO1、创建一个二叉树类2、然后创建二叉树的节点

记录二叉树的基本操作DEMO

1、创建一个二叉树类

这里约束了泛型只能为实现了Comparable这个接口的类型。

/**

* @author JackHui

* @version BinaryTree.java, 2020年03月05日 12:45

*/

public class BinaryTree {

//树根

BinaryTreeNode root;

public boolean deleteData(T data) {

if (root.data.equals(data)) {

root = null;

return true;

}

return root.deleteNode(data);

}

public T frontSearch(T data) {

return (T) root.frontSearch(data);

}

public T midSearch(T data) {

return (T) root.miOxiKbUodSearch(data);

}

public T rearSearch(T data) {

return (T) root.rearSearch(data);

}

public void frontEach() {

this.root.frontEach();

}

public void midEach() {

this.root.midEach();

}

public void rearEach() {

this.root.rearEach();

}

public BinaryTreeNode getRoot() {

return root;

}

public void setRoot(BinaryTreeNode root) {

this.root = root;

}

}

2、然后创建二叉树的节点

package binarytree;

/**

* @author JackHui

* @version BinaryTreeNode.java, 2020年03月06日 10:24

*/

public class BinaryTreeNode {

T data;

BinaryTreeNode lChild;

BinaryTreeNode rChild;

public BinaryTreeNode(T data) {

this.data = data;

}

//先序遍历

public void frontEach() {

System.out.print(this.data + "\t");

if (lChild != null) {

http:// lChild.frontEach();

}

if (rChild != null) {

rChild.frontEach();

}

}

//中序遍历

public void midEach() {

if (lChild != null) {

lChild.frontEach();

}

System.out.print(this.data + "\t");

if (rChild != null) {

rChild.frontEach();

}

}

//后序遍历

public void rearEach() {

if (lChild != null) {

lChild.frontEach();

}

if (rChild != null) {

rChild.frontEach();

}

System.out.print(this.data + "\t");

}

//先序查找

public T frontSearch(T data) {

T target = null;

System.out.println("[先序遍历]当前遍历到的元素:" + this.data + "\t查找的元素:" + data + "\t" + (this.data.compareTo(data) == 0 ? "查找到元素:" + data : ""));

if (this.data.compareTo(data) == 0) {

return data;

} else {

if (lChild != null && (target = (T) lChild.frontSearch(data)) != null) {

return target;

}

if (rChild != null && (target = (T) rChild.frontSearch(data)) != null) {

return target;

}

}

return target;

}

//中序查找

public T midSearch(T data) {

T target = null;

if (lChild != null && (target = (T) lChild.midSearch(data)) != null) {

return target;

}

System.out.println("[中序遍历]当前遍历到的元素:" + this.data + "\t查找的元素:" + data + "\t" + (this.data.compareTo(data) == 0 ? "查找到元素:" + data : ""));

if (this.data.compareTo(data) == 0) {

return data;

} else {

if (rChild != null && (target = (T) rChild.midSearch(data)) != null) {

return target;

}

}

return target;

}

//后序查找

public T rearSearch(T data) {

T target = null;

if (lChild != null && (target = (T) lChild.rearSearch(data)) != null) {

return target;

}

if (rChild != null && (target = (T) rChild.rearSearch(data)) != null) {

return target;

}

System.out.println("[后续遍历]当前遍历到的元素:" + this.data + "\t查找的元素:" + data + "\t" + (this.data.compareTo(data) == 0 ? "查找到元素:" + data : ""));

if (this.data.compareTo(data) == 0) {

return data;

}

return target;

}

//根据值删除节点

public boolean deleteNode(T data) {

System.out.println("[节点删除]当前遍历到的父节点:" + this.data + "\t" + "匹配的节点数据:" + data);

//判断左子树是否匹配

if (this.lChild != null && (this.lChild.data.compareTo(data) == 0)) {

System.out.println("[节点删除]当前遍历到的父节点:" + this.data + "\t" + "匹配的节点数据:" + data + "\t节点删除成功!");

this.lChild = null;

return true;

} else if (this.rChild != null && (this.rChild.data.compareTo(data) == 0)) {

System.out.println("[节点删除]当前遍历到的父节点:" + this.data + "\t" + "匹配的节点数据:" + data + "\t节点删除成功!");

this.rChild = null;

return true;

}

if (this.lChild != null && this.lChild.deleteNode(data)) {

return true;

}

if (this.rChild != null && this.rChild.deleteNode(data)) {

return true;

}

return false;

}

public T getData() {

return data;

}

public void setData(T data) {

this.data = data;

}

public BinaryTreeNode getlChild() {

return lChild;

}

public void setlChild(BinaryTreeNode lChild) {

this.lChild = lChild;

}

public BinaryTreeNode getrChild() {

return rChild;

}

public void setrChild(BinaryTreeNode rChild) {

this.rChild = rChild;

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring init
下一篇:详细谈谈Java中long和double的原子性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~