二叉树排序及二叉树节点的增删改查(java实现)
2017-06-19 10:42
561 查看
**
**
此处为二叉树节点类
**package search.binaryTreeSearch; /** * 二叉树节点 * @author jeker-chen * */ public class Node { int data; Node leftNode ; Node rightNode ; public Node(int data, Node leftNode, Node rightNode) { super(); this.data = data; this.leftNode = leftNode; this.rightNode = rightNode; } public Node() { super(); } public Node(int data) { super(); this.data = data; } }
**
二叉排序树类
**package search.binaryTreeSearch; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * 二叉树类 * * @author jeker-chen * */ public class BinaryTree { private static Node orignNode = new Node(); /** * 插入节点 * * @param 要插入的节点 * @param orign * 目标节点 */ public void InsertTree(Node node, Node orign) { if (node.data < orign.data) { if (orign.leftNode != null) { InsertTree(node, orign.leftNode); } else { orign.leftNode = new Node(node.data); } } else if (node.data > orign.data) { if (orign.rightNode != null) { InsertTree(node, orign.rightNode); } else { orign.rightNode = new Node(node.data); } } else { // do nothing } } /** * 二叉树查找 * * @param mubiao * 所要查找的数据 * @param orign * 二叉树的根节点 */ public Map<Node, Node> searchNode(int mubiao, Node orign, Node father) { if (orign == null) { System.out.println("查找节点不存在!"); return null; } if (orign.data == mubiao) { Map<Node, Node> map = new HashMap<>(); map.put(orign, father); return map; } else if (orign.data < mubiao) { return searchNode(mubiao, orign.rightNode, orign); } else { return searchNode(mubiao, orign.leftNode, orign); } } /** * 删除二叉树中指定的元素 * * @param orign * 二叉树根节点 * @param mubiao * 索要删除节点的数据 */ public void deleteNode(Map<Node, Node> nodeMap) { Node mubiao = nodeMap.keySet().iterator().next(); Node father = nodeMap.get(mubiao); // 若不存在左子树 if (mubiao.leftNode == null) { // 将右子节点的数据赋值给目标节点 if (father.leftNode == mubiao) { father.leftNode = mubiao.rightNode; } else { father.rightNode = mubiao.rightNode; } } else if (mubiao.rightNode == null) { if (father.leftNode == mubiao) { father.leftNode = mubiao.leftNode; } else { father.rightNode = mubiao.leftNode; } } else { Node left = mubiao.leftNode; if (left.rightNode == null) { father.leftNode = mubiao.leftNode; mubiao = null; } else { father = left; // 获得目标节点相邻节点 while (left.rightNode != null) { father = left; left = left.rightNode; } mubiao.data = left.data; father.rightNode = null; } } } public Node Create(List<Integer> integers) { for (int i = 0; i < integers.size(); i++) { if (i == 0) { orignNode.data = integers.get(i); } else { Node node = new Node(integers.get(i)); InsertTree(node, orignNode); } } return orignNode; } /* * 前序遍历二叉树的节点 */ public void preorderTraversal(Node T, int level) { if (T != null) { System.out.println(T.data + "在第" + level + "层"); preorderTraversal(T.leftNode, level + 1); preorderTraversal(T.rightNode, level + 1); } } public static void main(String[] args) { BinaryTree binaryTree = new BinaryTree(); List<Integer> integers = new LinkedList<>(); integers.add(5); integers.add(7); integers.add(3); integers.add(1); integers.add(2); integers.add(6); integers.add(4); binaryTree.Create(integers); binaryTree.preorderTraversal(orignNode, 0); System.out.println("====================="); Map<Node, Node> nodeMap = binaryTree.searchNode(1, orignNode, orignNode); // System.out.println(node.data); System.out.println(nodeMap.keySet().iterator().next().data); System.out.println(nodeMap.get(nodeMap.keySet().iterator().next()).data); binaryTree.deleteNode(nodeMap); binaryTree.preorderTraversal(orignNode, 0); } }
相关文章推荐
- java 移动节点,排序号进行重新排序,以闭包形式实现ztree增删改查操作,其中排序运用到此方法
- java学习之路----java类库----Arrays对对象的排序---二叉树实现原理
- java连接mysql实现增删改查代码
- Java实现对cookie的操作(增删改查)
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- 二叉树的JAVA实现-二叉树的增删改查CRUD
- Java二叉树排序及任意两点个节点间的最大距离
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- 二叉树排序在Java代码的简单实现
- 纯Java实现控制台对数据库的增删改查(Eclipse)
- java建立顺序表及增删改查的实现
- Java 实现二叉树排序和查找
- 数据结构(JAVA)---二叉树的简单实现及排序
- java对xml节点属性的增删改查实现方法
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- java实现堆排序(放入数组的索引对应二叉树节点位置)、归并排序
- java连接Oracle并实用存储过程实现增删改查(CRUD)
- java(jsp)简单实现数据库学生信息的增删改查案例
- java 顺序表实现增删改查,合并,排序功能
- 堆排序,堆增删操作,Java数组实现堆排序