/**
* @author songy
* @datetime 2021-10-20 17:20
*/
public class BinaryTree {
/*
* 前序遍历 根节点——>左子树——>右子树
*/
public static void firstErgodic(List<Integer> list, Node rootNode){
if(null == rootNode){
return;
}
list.add(rootNode.data);
firstErgodic(list, rootNode.leftNode);
firstErgodic(list, rootNode.rightNode);
}
/*
* 中序遍历 左子树——>根节点——>右子树
*/
public static void middleErgodic(List<Integer> list, Node rootNode){
if(null == rootNode){
return;
}
middleErgodic(list, rootNode.leftNode);
list.add(rootNode.data);
middleErgodic(list, rootNode.rightNode);
}
/*
* 后序遍历 左子树——>右子树——>根节点
*/
public static void lastErgodic(List<Integer> list, Node rootNode){
if(null == rootNode){
return;
}
lastErgodic(list, rootNode.leftNode);
lastErgodic(list, rootNode.rightNode);
list.add(rootNode.data);
}
/*
* 插入新节点
*/
public static Node insert(int num, Node rootNode){
if(null == rootNode){
rootNode = new Node();
rootNode.data = num;
}else {
if(rootNode.data > num){
rootNode.leftNode = insert(num, rootNode.leftNode);
}
if(rootNode.data < num){
rootNode.rightNode = insert(num, rootNode.rightNode);
}
}
return rootNode;
}
/*
* 删除节点
*/
public static Node remove(int num, Node rootNode){
if(null == rootNode){
return null;
}
if(rootNode.data == num){
if(null == rootNode.leftNode && null == rootNode.rightNode){
rootNode = null;
}else if(null != rootNode.leftNode){
Node maxNode = getMaxNode(rootNode.leftNode);
rootNode.data = maxNode.data;
rootNode.leftNode = remove(maxNode.data, rootNode.leftNode);
}else {
Node minNode = getMinNode(rootNode.rightNode);
rootNode.data = minNode.data;
rootNode.rightNode = remove(minNode.data, rootNode.rightNode);
}
}else if(num < rootNode.data){
rootNode.leftNode = remove(num, rootNode.leftNode);
}else {
rootNode.rightNode = remove(num, rootNode.rightNode);
}
return rootNode;
}
/*
* 获取树的最大值
*/
public static Node getMaxNode(Node rootNode){
if(null == rootNode){
return null;
}
if(null == rootNode.rightNode){
return rootNode;
}else {
return getMaxNode(rootNode.rightNode);
}
}
/*
* 获取树的最小值
*/
public static Node getMinNode(Node rootNode){
if(null == rootNode){
return null;
}
if(null == rootNode.leftNode){
return rootNode;
}else {
return getMinNode(rootNode.leftNode);
}
}
/*
* 测试
*/
public static void main(String[] args) {
int[] array = {12,9,45,66,2,34,7,10,5};
Node node = null;
for (int i = 0; i < array.length; i++) {
node = insert(array[i], node);
}
Node delete = remove(10, node);
ArrayList<Integer> list = new ArrayList<>();
firstErgodic(list,delete);
System.out.println(list.toString());
}
}
class Node{
//每个节点存放的数据
int data;
//左孩子节点
Node leftNode;
//右孩子节点
Node rightNode;
}
java实现二叉树
最新推荐文章于 2024-10-01 09:29:45 发布