数据结构-简单实现二叉树的先序、中序、后序遍历(java)

第一步:创建一颗二叉树

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 {  
    /**
     * 二叉树的先序中序后序排序 
     */  
    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) {
    		theFirstTraversal(root.getLeftNode());
    	}
    	printNode(root);
    	if(root.getRightNode()!=null) {
    		theFirstTraversal(root.getRightNode());
    	}
    }
    //后序遍历
    public void thePostOrderTraversal(Node root) {
    	if(root.getLeftNode()!=null) {
    		theFirstTraversal(root.getLeftNode());
    	}
    	if(root.getRightNode()!=null) {
    		theFirstTraversal(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("");  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梁同学与Android

你的鼓励将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值