二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)

二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)
深度优先遍历:从根节点出发, 沿着左子树的方向进行纵向遍历,直到找到叶子节点为之, 然后回溯到前一个节点, 进行右子树节点的遍历,直到遍历完所有可达节点为止
广度优先遍历: 从根节点出发,在横向遍历二叉树层段节点的基础上纵向遍历二叉树层次
           			  A
           			  
        	 B     			   C
        	
    	 D      E 		 	F   	G        

DFS: ABDECFG
BFS: ABCDEFG

非递归
DFS实现: 数据结构 (栈)

父节点入栈, 父节点出栈, 先右子节点入栈, 后左子节点入栈, 递归遍历全部节点

public void depthFirstSearch(TreeNode root) {
	Stack<TreeNode> stack = new Stack<>();
	List<Integer> list = new ArrayList<>();
	if (null == root) return;
	stack.push(root);
	while (!stack.isEmpty()) {
		TreeNode node = stack.pop();
		list.add(node.val);
		if (node.right != null) {
			stack.push(node.right);
		}
		if (node.left != null) {
			stack.push(node.right);
		}
	}
}
BFS实现: 数据结构 (队列)

父节点入队,父节点出队列,先左子节点入队,后右子节点入队。递归遍历全部节点即可

public void breadthFirstSearch(TreeNode root) {
	Queue<TreeNode> queue = new Queue<>();
	List<Integer> list = new ArrayList<>();
	queue.push(root);
	while (!queue.isEmpty()) {
		TreeNode node = queue.pop();
		list.add(node.val);
		if (node.left != null) {
			queue.push(node.left);
		} 
		if (node.right != null) {
			queue.push(node.right);
		}
	}
}
递归
public void depthOrderTraversalWithRecursive(TreeNode root) {
	depthTraversal(root);
}

private void depthTraversal(TreeNode node) {
	if (null == node) return;
	depthTraversal(node.left);
	depthTraversal(node.right);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值