Java之二叉树遍历

二叉树的应用很广(辉哥大傻叉),比如红黑树(特殊的二叉树),数据库的B+tree,以及一些压缩算法

 

这里只介绍简单的二叉树:

特征:一.一个根节点

           二.众多子节点,每个节点最多有两个子节点

二叉树遍历方式:总体有两种,分别基于DFS(深度优先搜索)和BFS(广度优先搜索)的,前者包括递归(先序、中序、后序)和Stack(栈),后者是队列实现的层序遍历。

####树节点类如下

public class TreeNode {

	private int data;
	private TreeNode left;
	private TreeNode right;
	
	public TreeNode(int data,TreeNode left,TreeNode right) {
		this.data = data;
		this.left = left;
		this.right = right;
	}
	public int getData() {
		return data;
	}
	public TreeNode getLeft() {
		return left;
	}
	public TreeNode getRight() {
		return right;
	}
	
}

#####模拟的二叉树形态如下

#####模拟数据如下

//返回根节点
	public static TreeNode init() {
		TreeNode node8 = new TreeNode(8,null,null);
		TreeNode node4 = new TreeNode(4,null,null);
		TreeNode node2 = new TreeNode(2,null,null);
		TreeNode node7 = new TreeNode(7,null,node8);
		TreeNode node5 = new TreeNode(5,node4,null);
		TreeNode node1 = new TreeNode(1,null,node2);
		TreeNode node9 = new TreeNode(9,node7,null);
		TreeNode node3 = new TreeNode(3,node1,node5);
		TreeNode node6 = new TreeNode(6,node3,node9);
		
		return node6;
	}

一。递归式(DFS)

前序递归遍历算法:访问根结点-->递归遍历根结点的左子树-->递归遍历根结点的右子树

 中序递归遍历算法:递归遍历根结点的左子树-->访问根结点-->递归遍历根结点的右子树

 后序递归遍历算法:递归遍历根结点的左子树-->递归遍历根结点的右子树-->访问根结点

1.前序遍历

/**
	 * 递归式先序遍历  根节点-->递归根节点左子树-->递归根节点右子树
	 * 输出结果631254978
	 * 6是根节点
	 * @param node
	 */
	public static void preOrder(TreeNode node) {
		System.out.println(node.getData());
		if(null!=node.getLeft()) {
			preOrder(node.getLeft());
		}
		if(null!=node.getRight()) {
			preOrder(node.getRight());
		}
	}

先序遍历输出结果:有时间画图具体描述输出顺序总结。。。。。。

2.中序遍历

/**
	 * 递归式中序遍历     递归根节点左子树-->访问根节点-->递归根节点右子树
	 * 输出结果123456789
	 * @param node
	 */
	public static void midOrder(TreeNode node) {
		if(null!=node.getLeft()) {
			midOrder(node.getLeft());
		}
		System.out.println(node.getData());
		if(null!=node.getRight()) {
			midOrder(node.getRight());
		}
	}

中序遍历输出结果:有时间画图具体描述输出顺序总结。。。。。。

3.后序遍历

/**
	 * 递归式后序遍历     递归根节点左子树-->递归根节点右子树-->访问根节点
	 * 输出结果214538796
	 * @param node
	 */
	public static void lastOrder(TreeNode node) {
		if(null!=node.getLeft()) {
			lastOrder(node.getLeft());
		}
		
		if(null!=node.getRight()) {
			lastOrder(node.getRight());
		}
		
		System.out.println(node.getData());
	}

后序遍历输出结果:有时间画图具体描述输出顺序总结。。。。。。

二。非递归式(DFS)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值