public class Node {
private int data;
private Node leftNode;
private Node rightNode;
public Node(int data, Node leftNode, Node rightNode){
this.data = data;
this.leftNode = leftNode;
this.rightNode = rightNode;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
}
public class BinaryTree {
/**
* @author yaobo
* 二叉树的先序中序后序排序
*/
public Node init() {//注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
Node J = new Node(8, null, null);
Node H = new Node(4, null, null);
Node G = new Node(2, null, null);
Node F = new Node(7, null, J);
Node E = new Node(5, H, null);
Node D = new Node(1, null, G);
Node C = new Node(9, F, null);
Node B = new Node(3, D, E);
Node A = new Node(6, B, C);
return A; //返回根节点
}
public void printNode(Node node){
System.out.print(node.getData());
}
public void theFirstTraversal(Node root) { //先序遍历
printNode(root);
if (root.getLeftNode() != null) { //使用递归进行遍历左孩子
theFirstTraversal(root.getLeftNode());
}
if (root.getRightNode() != null) { //递归遍历右孩子
theFirstTraversal(root.getRightNode());
}
}
public void theInOrderTraversal(Node root) { //中序遍历
if (root.getLeftNode() != null) {
theInOrderTraversal(root.getLeftNode());
}
printNode(root);
if (root.getRightNode() != null) {
theInOrderTraversal(root.getRightNode());
}
}
public void thePostOrderTraversal(Node root) { //后序遍历
if (root.getLeftNode() != null) {
thePostOrderTraversal(root.getLeftNode());
}
if(root.getRightNode() != null) {
thePostOrderTraversal(root.getRightNode());
}
printNode(root);
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
Node root = tree.init();
System.out.println("先序遍历");
tree.theFirstTraversal(root);
System.out.println("");
System.out.println("中序遍历");
tree.theInOrderTraversal(root);
System.out.println("");
System.out.println("后序遍历");
tree.thePostOrderTraversal(root);
System.out.println("");
}
}
分享到:
相关推荐
二叉树的遍历,全部用递归实现,很有规律! 二叉树的遍历,全部用递归实现,很有规律
java实现 二叉树的遍历 前序遍历用到递归, 中序和后序遍历用到栈, 其实还是有一定难度的
本话题主要涉及使用Java语言,通过给定的前序和中序遍历结果来构造二叉树,以及对构造出的二叉树进行后序遍历和判断是否为平衡二叉树。以下是关于这些知识点的详细解释: 1. **二叉树**: 二叉树是一种特殊的树形...
* 已知二叉树前序和中序,求后序 * @param pre * @param mid * @param last * @param i */ public static int i =0;//i:表示要插入后序序列的位置对于生成的后序序列,应该从最后位置开始写, // 所以...
本文将深入探讨如何使用Java实现二叉树的前序、中序和后序建树,以及对应的遍历方法。 首先,我们需要定义一个二叉树节点类`TreeNode`,它包含两个属性:一个整型值`val`表示节点的值,以及两个指向子节点的引用`...
本资源主要讲解了如何使用前序遍历和中序遍历来构造二叉树的算法,并提供了Java和Python的实现代码。下面是对该算法的详细解释: 二叉树的遍历规则 在解决这个问题之前,我们首先需要了解二叉树的遍历规则。二叉树...
java实现二叉树非递归前序中序后序遍历
根据访问节点的顺序不同,常见的遍历方法包括前序遍历、中序遍历、后序遍历和层次遍历。此外,我们还需要了解如何计算二叉树的宽度和深度。 #### 三、递归遍历 递归遍历是最直观的方法,它利用了递归的思想,将大的...
建立二叉树的过程通常是从给定的输入序列(如前序、中序或后序遍历序列)开始的。例如,如果给定的是前序遍历序列,我们可以首先找到根节点,然后递归地构建左右子树。在中序遍历序列中,根节点位于序列的中间,而在...
这里我们将重点讨论如何在已知二叉树的前序和中序遍历的情况下,通过非递归算法实现后序遍历。 **前序遍历**:根节点 -> 左子树 -> 右子树 **中序遍历**:左子树 -> 根节点 -> 右子树 **后序遍历**:左子树 -> 右子...
在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...
[问题描述] 建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数。 [基本要求] 要求根据读取的元素建立二叉树,能输出各种遍历。 [实现提示] 可通过输入带空格的前序序列建立二叉链表。
java数据结构二叉树的打印,通过队列,栈等,最后前序中序后序和层次四种遍历。。。
"Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】" Java二叉搜索树是一种常用的数据结构,遍历操作是其核心内容。Java二叉搜索树遍历操作可以分为五种:前序遍历、中序遍历、后序遍历、层次...
以上代码片段展示了如何使用Java实现树的前序、后序递归遍历以及层序非递归遍历。这些方法在实际编程中非常有用,例如在搜索、排序、编译器设计、文件系统等领域都有应用。通过理解和掌握这些算法,你可以更好地理解...
二叉树的遍历是对其进行操作和理解的关键部分,主要包括前序遍历、中序遍历和后序遍历。本话题将详细探讨如何根据给定的二叉树前序遍历和中序遍历的结果,利用Java来输出其后序遍历的序列。 前序遍历的顺序是:根...
以下是使用JAVA实现的前序遍历代码示例: ```java public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public void preorderTraversal(TreeNode root) { if ...
二叉树的遍历主要包括前序遍历、中序遍历和后序遍历。 1. **前序遍历**:先访问根节点,再遍历左子树,最后遍历右子树。 2. **后序遍历**:先遍历左子树,再遍历右子树,最后访问根节点。 例如,前序遍历的递归...
JAVA编程思想编写的遍历递归程序.简单明了