1.二叉树原图
2.详细代码
/**
*Project Name: ml
*File Name: Node.java
*Package Name: binarytreetraverse
*Date: 2017年11月3日 下午3:36:41
*Copyright (c) 2017,578888218@ All Rights Reserved.
*/
package binarytreetraverse;
/**
*Title: Node<br/>
*Description:
*@Company: XXXX<br/>
*@author: 刘云生
*@version: v1.0
*@since: JDK 1.8.0_40
*@Date: 2017年11月3日 下午3:36:41 <br/>
*/
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,578888218@ All Rights Reserved.
*/
package binarytreetraverse;
/**
* Title: BinaryTree<br/>
* Description:
*
* @Company: XXXX<br/>
* @author: 刘云生
* @version: v1.0
* @since: JDK 1.8.0_40
* @Date: 2017年11月3日 下午3:38:39 <br/>
*/
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