JAVA二叉树
来源:互联网 发布:建行软件下载 编辑:程序博客网 时间:2024/06/01 10:47
JAVA二叉树
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
想要实现二叉树,首先要实现一个二叉树节点。
private class BinaryNode { private int mValue; private BinaryNode LefeNode;//左子树 private BinaryNode RightNode;//右子树 public BinaryNode(int value) { //构造函数,默认左右子树均为空 mValue = value; LefeNode = null; RightNode = null; } }
接着实现一个二叉树的实体类
public class BinaryTree { private BinaryNode root;//根节点 //创建一个二叉树 public void generateTree(int size) { LinkedList<BinaryNode> nodes = new LinkedList<>(); for (int i = 1; i <= size; i++) { nodes.add(new BinaryNode(i)); } for (int parentIndex = 0; parentIndex < size / 2; parentIndex++) { if (size > parentIndex * 2 + 1) nodes.get(parentIndex).LefeNode = nodes.get(parentIndex * 2 + 1); if (size > parentIndex * 2 + 2) nodes.get(parentIndex).RightNode = nodes.get(parentIndex * 2 + 2); } root = nodes.get(0); } /** * 递归前序遍历 * @param node */ public void preOrder(BinaryNode node) { if (node == null) return; System.out.print(node.mValue + " "); preOrder(node.LefeNode); preOrder(node.RightNode); } /** * 递归中序遍历 * @param node */ public void midOrder(BinaryNode node) { if (node == null) return; midOrder(node.LefeNode); System.out.print(node.mValue + " "); midOrder(node.RightNode); } /** * 递归后序遍历 * @param node */ public void postOrder(BinaryNode node) { if (node == null) return; postOrder(node.LefeNode); postOrder(node.RightNode); System.out.print(node.mValue + " "); } /** * 非递归前序遍历 * @param node */ public void iteratorPreOrder(BinaryNode node){ Stack<BinaryNode> stack = new Stack<>(); while (node!=null || !stack.isEmpty()){ while (node!=null){ System.out.print(node.mValue + " "); stack.add(node); node = node.LefeNode; } if(!stack.isEmpty()){ node = stack.pop(); node = node.RightNode; } } } /** * 非递归中序遍历 * @param node */ public void iteratorMidOrder(BinaryNode node){ Stack<BinaryNode> stack = new Stack<>(); while (node!=null || !stack.isEmpty()){ while (node!=null){ stack.add(node); node = node.LefeNode; } if(!stack.isEmpty()){ node = stack.pop(); System.out.print(node.mValue + " "); node = node.RightNode; } } } /** * 非递归后序遍历 * @param node */ public void iteratorPostOrder(BinaryNode node){ Stack<BinaryNode> stack = new Stack<>(); BinaryNode pre_node = node; while (node!=null || !stack.isEmpty()){ while (node!=null){ stack.add(node); node = node.LefeNode; } if(!stack.isEmpty()){ BinaryNode temp = stack.peek().RightNode; if(temp == null || temp == pre_node){ temp = stack.pop(); System.out.print(temp.mValue + " "); pre_node = temp; node = null; }else{ node = temp; } } } }}
阅读全文
0 0
- JAVA 实现二叉树
- 二叉树 java实现
- java数据结构:二叉树
- java二叉树现实
- 二叉树实现-java
- JAVA 数据结构 二叉树
- java 二叉树
- JAVA 实现二叉树。
- java二叉树遍历
- 二叉树Java实现
- java实现二叉树
- java数据结构----二叉树
- java-二叉树排序
- 二叉树Java实现
- java编写二叉树
- java 二叉树创建
- java创建二叉树
- Java二叉树代码
- 小朋友学C++(5):构造函数
- 小朋友学C++(6):this指针
- 面向对象:愿有一人,令我喜你成疾,药石无医
- 趣图:在 2G 内存电脑上运行 Android Studio
- Kotlin中的并发原语
- JAVA二叉树
- 小朋友学C++(7):封装
- 对全连接层的深入理解
- 为什么我讨厌开放式办公?
- python中遍历list的三种方式
- 小朋友学C++(8):继承
- BZOJ 5085(最大-经典题)
- Android数据库操作—— GreenDao让你的数据操作更简单
- Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.