二叉树的前序,中序,后序遍历Java实现

1.二叉树原图

二叉树的前序,中序,后序遍历Java实现_第1张图片

2.详细代码


/**
 *Project Name: ml
 *File Name:    Node.java
 *Package Name: binarytreetraverse
 *Date:         2017年11月3日 下午3:36:41
 *Copyright (c) 2017,[email protected] All Rights Reserved.
*/

package binarytreetraverse;
/**
 *Title:      Node
*Description: *@Company: XXXX
*@author: 刘云生 *@version: v1.0 *@since: JDK 1.8.0_40 *@Date: 2017年11月3日 下午3:36:41
*/ public class Node { private int data; private Node leftNode; private Node rightNode; public Node(int data, Node leftNode, Node rightNode) { this.setData(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; } }


/**
 *Project Name: ml
 *File Name:    BinaryTree.java
 *Package Name: binarytreetraverse
 *Date:         2017年11月3日 下午3:38:39
 *Copyright (c) 2017,[email protected] All Rights Reserved.
*/

package binarytreetraverse;

/**
 * Title: BinaryTree
* Description: * * @Company: XXXX
* @author: 刘云生 * @version: v1.0 * @since: JDK 1.8.0_40 * @Date: 2017年11月3日 下午3:38:39
*/ public class BinaryTree { 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()); } /** * 先序遍历 * @Title: theFirstTraversal * @Description: TODO * @param: @param root * @return: void * @author: 刘云生 * @Date: 2017年11月3日 下午4:06:52 * @throws */ public void theFirstTraversal(Node root) { printNode(root); if (root.getLeftNode() != null) { // 使用递归进行遍历左孩子 theFirstTraversal(root.getLeftNode()); } if (root.getRightNode() != null) { // 递归遍历右孩子 theFirstTraversal(root.getRightNode()); } } /** * 中序遍历 * @Title: theInOrderTraversal * @Description: TODO * @param: @param root * @return: void * @author: 刘云生 * @Date: 2017年11月3日 下午4:06:08 * @throws */ public void theInOrderTraversal(Node root) { if (root.getLeftNode() != null) { theInOrderTraversal(root.getLeftNode()); } printNode(root); if (root.getRightNode() != null) { theInOrderTraversal(root.getRightNode()); } } /** * 后序遍历 * @Title: thePostOrderTraversal * @Description: TODO * @param: @param root * @return: void * @author: 刘云生 * @Date: 2017年11月3日 下午4:05:42 * @throws */ 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(""); } }


3.输出结果

先序遍历
631254978
中序遍历
123456789
后序遍历
214538796



你可能感兴趣的:(Java的工具类)