【算法系列-4】二叉树
来源:互联网 发布:网络传输技术种类 编辑:程序博客网 时间:2024/06/05 16:50
j结点类;
public class Node {public int id;public String name;public Node leftChild;public Node rightChild;public Node(int id, String name){this.id = id;this.name = name;}public void display(){System.out.println("id-->" + id + ", name-->" + name);}}
主类:
public class Tree {private Node root;public boolean isEmpty(){if(null == root)return true;return false;}public void insert(int id, String name){Node node = new Node(id, name);boolean isLeftChild = false;if(null == root){root = node;}else{Node parent = root;Node current = root;while(null != current){parent = current;if(current.id > id){current = current.leftChild;isLeftChild = true;}else{current = current.rightChild;isLeftChild = false;}}if(isLeftChild){parent.leftChild = node;}else{parent.rightChild = node;}}}public Node find(int id){if(isEmpty())return null;Node current = root;while(null != current){if(current.id == id){return current;}else if(current.id > id){current = current.leftChild;}else{current = current.rightChild;}}return null;}public boolean delete(int id){if(isEmpty())return false;Node parent = root;Node current = root;boolean isLeftChild = true;while(current.id != id){if(null == current)return false;parent = current;if(current.id < id){current = current.leftChild;isLeftChild = true;}else{current = current.rightChild;isLeftChild = false;}}/*1. none child*/if(null == current.leftChild && null == current.rightChild){if(current == root){current = null;}else if(isLeftChild){parent.leftChild = null;}else{parent.rightChild = null;}}else if(null == current.leftChild){if(root == current){root = current.rightChild;}else if(isLeftChild){parent.leftChild = current.rightChild;}else{parent.rightChild = current.rightChild;}}else if(null == current.rightChild){if(root == current){root = current.leftChild;}else if(isLeftChild){parent.leftChild = current.leftChild;}else{parent.rightChild = current.leftChild;}}else{/*待删除节点有两个孩子*/Node successor = getSuccessor(current);if(root == current){root = successor;}else if(isLeftChild){parent.leftChild = successor;}else{parent.rightChild = successor;}successor.leftChild = current.leftChild;}return true;}/** * 返回中序遍历的后续节点 * @param delNode * @return */private Node getSuccessor(Node delNode){Node successorParent = delNode;Node successor = delNode;Node current = delNode.rightChild;while(null != current){successorParent = successor;successor = current;current = current.leftChild;}if(successor != delNode.rightChild){successorParent.leftChild = successor.rightChild;successor.rightChild = delNode.rightChild;}return successor;}/* * 中序遍历 */public void inOrder(Node node){if(null == node)return;inOrder(node.leftChild);node.display();inOrder(node.rightChild);}public void display(){inOrder(root);}public static void main(String[] args){Tree tree = new Tree();tree.insert(1, "Jordan");tree.insert(2, "James");tree.insert(3, "kobe");tree.insert(5, "wade");tree.insert(10, "curry");tree.display();}}
0 0
- 【算法系列-4】二叉树
- 数据结构与算法系列---二叉树
- 排序算法系列之二叉查找树
- 算法题---Tree系列(二叉树 )
- 算法入门经典二叉树系列 UVO
- 数据结构和算法系列14 二叉树
- [算法系列之六]二叉查找树
- 算法系列笔记3(二叉查找树)
- 算法系列—二叉查找树
- 数据结构和算法系列之 二叉树
- 精通算法系列-二叉树路径
- 精通算法系列-二叉树问题
- 数据结构与算法系列-树-二叉树存储结构
- 算法系列(九)平衡二叉查找树AVL树
- 数据结构与算法系列----平衡二叉树(AVL树)
- 数据结构与算法(C#实现)系列---二叉树
- (codes)二叉树的系列算法,递归与非递归
- 数据结构与算法(C#实现)系列---二叉树
- log4j.properties 的使用详解
- 关于容器Map删除元素的常见问题
- 手机Android音视频采集与直播推送
- 学习笔记:UIPickerView
- Windows环境下Android NDK环境搭建
- 【算法系列-4】二叉树
- 20160823关于GCD与NSOperation的一些比较
- 字节序
- DNS域名解析过程
- RSA加密初体验--加解密
- Python 模块功能paramiko SSH 远程执行及远程下载(可以使用)
- AOE网上的关键路径
- android 无法调用相册图片进行裁剪
- 【算法系列-8】拓展-现实世界广泛应用的十三大算法