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

1.二叉树原图


2.详细代码


/**
 *Project Name: ml
 *File Name:    Node.java
 *Package Name: binarytreetraverse
 *Date:         2017年11月3日 下午3:36:41
 *Copyright (c) 2017,578888218@qq.com 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@qq.com 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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyunshengsir

微信:lys20191020

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值