二叉树的基本操作
来源:互联网 发布:矩阵图怎么画 编辑:程序博客网 时间:2024/05/22 13:09
二叉树节点的创建
public class Node { //节点的值 public int data; //左子节点 public Node leftNode; //右子节点 public Node rightNode; /** * @Description TODO(构造函数) */ public Node(int data) { this.data = data; }}
二叉树节点的创建
public Node root; /** * @Description 插入操作 * @param value */ public void insert(int value) { Node newNode = new Node(value); Node current = root; Node parent; if (current == null) { root = newNode; } else { while (true) { parent = current; if(current.data == value){ return; } if (current.data > value) { current = current.leftNode; if (current == null) { parent.leftNode = newNode; return; } }else if (current.data < value) { current = current.rightNode; if (current == null) { parent.rightNode = newNode; return; } } } } }
二叉树节点的查找
//第一种没有简洁性public void find(int value){ Node current = root; while(true) if(current.data == value){ System.out.println("查找到"); return; } else if(current.data > value){ if(current.leftNode == null){ System.out.println("二叉树上没有该值"); return; }else{ current = current.leftNode; } } else if(current.data < value){ if(current.rightNode == null){ System.out.println("二叉树上没有该值"); return; }else{ current = current.rightNode; } } }//简洁public Node find(long value) { //引用当前节点,从根节点开始 Node current = root; //循环,只要查找值不等于当前节点的数据项 while(current.data != value) { //进行比较,比较查找值和当前节点的大小 if(current.data > value) { current = current.leftChild; } else { current = current.rightChild; } //如果查找不到 if(current == null) { return null; } } return current; }
二叉树节点的删除
- 节点没有子节,直接将该节点赋null
- 节点有一个子节点,将此子节点直接与父节点相连接
- 节点有左右节点,采用中继后序的方法(将该节点的右节点上的最左边的左子节点的值赋给该节点
public boolean delete(long value) { //引用当前节点,从根节点开始 Node current = root; //应用当前节点的父节点 Node parent = root; //是否为左节点 boolean isleftNode = true; while(current.data != value) { parent = current; //进行比较,比较查找值和当前节点的大小 if(current.data > value) { current = current.leftNode ; isleftNode = true; } else { current = current.rightNode; isleftNode = false; } //如果查找不到 if(current == null) { return false; } } //删除叶子节点,也就是该节点没有子节点 if(current.leftNode == null && current.rightNode == null) { if(current == root) { root = null; } else if(isleftNode) { parent.leftNode = null; } else { parent.rightNode = null; } } else if(current.rightNode == null) { if(current == root) { root = current.leftNode; }else if(isleftNode) { parent.leftNode = current.leftNode; } else { parent.rightNode = current.leftNode; } } else { Node successor = getSuccessor(current); if(current == root) { root = successor; } else if(isleftNode) { parent.leftNode = successor; } else{ parent.rightNode = successor; } successor.leftNode = current.leftNode; } return true; } //用于寻找左子节点 public Node getSuccessor(Node delNode) { Node successor = delNode; Node successorParent = delNode; Node current = delNode.rightNode; while(current != null) { successorParent = successor; successor = current; current = current.leftNode; } if(successor != delNode.rightNode) { successorParent.leftNode = successor.rightNode; successor.rightNode = delNode.rightNode; } return successor; }
阅读全文
0 0
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- Android App加固原理分析
- HDU 3336 Count the string(KMP+稍微DP+next数组的运用)
- idea离线使用jrebel(亲测可用)
- Linux管道
- Qt5.5+vs2013开发环境配置
- 二叉树的基本操作
- 欢迎使用CSDN-markdown编辑器
- python全局变量使用
- 第一节:TCP/IP概括
- 集合框架(三) Set&HashSet
- RobotFramework日志不显示
- Angular 中用 a 标签 href 路由时在浏览器中显示异常 "%2F" 路由失败问题
- sizeof
- 二叉树的遍历