二叉树操作

二叉树算法设计:

递归:先写终止条件,然后明确一个结点要做的事(包含递归操作)

遍历:遍历每一个结点

深度优先遍历DFS:preOrder, midOrder, postOrder,midReverseOrder

一般递归(也可用栈)实现

广度优先遍历BFS:levelOrder

队列+循环实现

BST 二叉搜索树/二叉排序树/二叉查找树:左孩子<root<右孩子

对于BST:
按小大顺序打印:中序遍历
按大小顺序打印:中序的倒遍历

  • 先序遍历: 先访问根节点

若二叉树为空则结束返回,否则:
(1)访问根结点。
(2)前序遍历左子树。
(3)前序遍历右子树
在这里插入图片描述

public void preOrder(TreeNode root) {
	对每个结点要干的事//System.out.println(root.val)
	preOrder(root.left);
	preOrder(root.right);
	return;
}
  • 中序遍历:中间访问根节点

若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
在这里插入图片描述

public void midOrder(TreeNode root) {
	midOrder(root.left);
	对每个结点要干的事//System.out.println(root.val)
	midOrder(root.right);
	return;
}
  • 后序遍历

若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)中序遍历右子树
(3)访问根结点
在这里插入图片描述

public void postOrder(TreeNode root) {
	postOrder(root.left);
	postOrder(root.right);
	对每个结点要干的事//System.out.println(root.val)
	return;
}
  • 中序的倒遍历:中间访问根节点

若二叉树为空则结束返回,否则:
(1)中序遍历右子树
(2)访问根结点
(3)中序遍历左子树
在这里插入图片描述

public void midReverseOrder(TreeNode root) {
	midReverseOrder(root.right);
	对每个结点要干的事//System.out.println(root.val)
	midReverseOrder(root.left);
	return;
}
  • 层次遍历:

1.对于不为空的结点,先把该结点加入到队列中
2.从队中拿出结点,如果该结点的左右结点不为空,就分别把左右结点加入到队列中
3.重复以上操作直到队列为空
在这里插入图片描述

import java.util.*;
public void levelOrder(TreeNode root) {
	if(root==null) return;
	//如果有root不为空
	Queue<TreeNode> q = new LinkedList<>();
	q.offer(root);
	TreeNode node = null;
	//队列不为空
	while(!q.isEmpyt()){
		node=q.poll();
		对每个结点要干的事//System.out.println(node.val)
		//把不为空的子字节插入队列
		if (node.left!=null) q.offer(node.left);
		if (node.right!=null) q.offer(node.right);
	}
	return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值