Java-二叉树-插入、删除、遍历
来源:互联网 发布:信用卡 对比.知乎 编辑:程序博客网 时间:2024/06/07 02:51
二叉树的具体特性和细节知识点,自行百度,直接上代码。
节点:节点内容、左子孩子、右子孩子、父亲
class Node { private int data; private Node leftChild; private Node rightChild; private Node parent; public Node getParent() { return parent; } public void setParent(Node parent) { this.parent = parent; } public Node(int data, Node leftChild, Node rightChild, Node parent) { this.data = data; this.leftChild = leftChild; this.rightChild = rightChild; this.parent = parent; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getLeftChild() { return leftChild; } public void setLeftChild(Node leftChild) { this.leftChild = leftChild; } public Node getRightChild() { return rightChild; } public void setRightChild(Node rightChild) { this.rightChild = rightChild; }}
public class BinaryTree { private Node root;//根节点 //插入节点 public void insertNode(Node root, Node node) { Node current = root; while (true) { if (node.getData() < current.getData()) { if (current.getLeftChild() == null) { node.setParent(current); current.setLeftChild(node); break; } else { current = current.getLeftChild(); } } else { if (current.getRightChild() == null) { node.setParent(current); current.setRightChild(node); break; } else { current = current.getRightChild(); } } } } //删除节点 public void deleteNode(Node node) { if (node.equals(root)) { root = null; } else if (node.getParent() != null) { if (node == node.getParent().getLeftChild()) { node.getParent().setLeftChild(null); } else { node.getParent().setRightChild(null); } } } //获取某节点的高度 public int geHeight(Node node) { if (node == null) { return 0; } else { int leftHeight = geHeight(node.getLeftChild()); int rightHeight = geHeight(node.getRightChild()); int max = Math.max(leftHeight, rightHeight); return max + 1; } } //获取某节点的子节点个数 public int getChildNodes(Node node) { if (node == null) { return 0; } else { int leftNodes = getChildNodes(node.getLeftChild()); int rightNodes = getChildNodes(node.getRightChild()); return leftNodes + rightNodes + 1; } } //先序遍历树 public void PreOrder(Node root) { if (root == null) return; System.out.print(root.getData() + " "); PreOrder(root.getLeftChild()); PreOrder(root.getRightChild()); } //中序 public void MidOrder(Node root) { if (root == null) return; MidOrder(root.getLeftChild()); System.out.print(root.getData() + " "); MidOrder(root.getRightChild()); } //后序 public void LastOrder(Node root) { if (root == null) return; LastOrder(root.getLeftChild()); LastOrder(root.getRightChild()); System.out.print(root.getData() + " "); } public BinaryTree() { } public BinaryTree(Node root) { this.root = root; } public Node getRoot() { return root; } public void setRoot(Node root) { this.root = root; }}
测试:
public class Main { public static void main(String[] args) { BinaryTree bt = new BinaryTree(new Node(1, null, null, null)); int a[] = {5, 3, 2, 7, 4, 9, 8}; for (int i = 0; i < 7; i++) { bt.insertNode(bt.getRoot(), new Node(a[i], null, null, null)); }// System.out.println(bt.geHeight(root));//高度// bt.PreOrder(root);// System.out.println();// bt.MidOrder(root);// System.out.println();// bt.LastOrder(root);// System.out.println();// bt.deleteNode(bt.getRoot());// bt.PreOrder(bt.getRoot()); // System.out.println(bt.getChildNodes(bt.getRoot()));//子节点数 }}
阅读全文
0 0
- Java-二叉树-插入、删除、遍历
- 二叉树(插入,删除,遍历等)java实现
- 二叉搜索树的搜索、插入、遍历和删除(Java)
- java实现二叉查找树(插入、删除、遍历、查找)
- 二叉查找树(插入、查找、遍历、删除.........)
- Java实现二叉查找树的创建、查找、插入、删除、遍历
- 二叉树:实现java操作二叉排序树(生成、插入、遍历、删除)
- 二叉搜索树的创建、遍历、插入、删除(C++版本)
- 二叉树的创建,遍历,查找,删除,插入,修改
- 二叉树的查找,插入,删除,遍历,最小值,最大值 操作
- 算法学习----二叉树的查找、 删除、插入、遍历
- 二叉树遍历、插入、删除等常见操作
- 二叉搜索树(插入、删除、迭代遍历)
- 二叉树的链式实现(插入,查找,遍历,删除)
- 二叉树的遍历、查找、插入以及删除
- 简易版二叉查找树(查找,插入,遍历,删除)
- 二叉搜索树的插入,删除,遍历操作详解
- C++实现二叉树的插入、删除、查询、遍历
- linux解决tomcat内存溢出
- jmeter-察看结果树-响应数据中的中文显示乱码
- [Python] linux下安装Python3.6,与27共存
- Qt5.8用HTTP实现文件上传和下载(带进度条)
- CentOS系统更换软件安装源
- Java-二叉树-插入、删除、遍历
- 计算时间差
- spring boot 系统启动运行的类 MyCommandLineRunner
- Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)
- 为什么一定要让孩子上名牌大学?这位面试官不小心说出了真相
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- Linux 使用 rsync 遠端檔案同步與備份工具教學與範例
- 替换^M字符 linux下
- Java并发编程:JMM和volatile关键字