03-二叉树的遍历
二叉树的遍历
定义:
遍历是数据结构中的常见操作把所有元素都访问一遍
线性数据结构的遍历比较简单分为:正序遍历和逆序遍历
根据结点访问顺序的不同,二叉树的常见遍历方式有4种
前序遍历(Preorder Traversal)
中序遍历(inorder Traversal)
后序遍历(Postorder Traversal)
层序遍历(Level Order Traversal)
前序遍历
- 访问顺序
- 根结点、前序遍历左子树、前序遍历右子树
- 7、4、2、1、3、5、9、8、11、10、12
类似递归
/**
* 前序遍历
*/
@SuppressWarnings("unused")
// 公开的方法
public void preorderTravesal() {
preorderTravesal(rootNode);
}
// 私有的方法
private void preorderTravesal(Node<E> node) {
if(node == null) return;
System.out.println(node.element);
preorderTravesal(node.liftnode);
preorderTravesal(node.rightnode);
}
public static void main(String[] args) {
BinarySearchTree <Integer> bst3 = new BinarySearchTree<>();
Integer data[] = new Integer[] {
7,4,2,1,3,5,9,8,11,10,12
};
for(int i = 0 ; i < data.length; i++) {
bst3.add(data[i]);
}
bst3.preorderTravesal();
中序遍历
- 访问顺序
- 中序遍历左子树、根结点、中序遍历右子树
- 1、2、3、4、5、7、8、9、10、11、12
- 1、2、3、4、5、7、8、9、10、11、12
- 如果访问顺序是下面这样呢?
- 中序遍历右子树、根结点、中序遍历左子树
- 12、11、10、9、8、7、5、4、3、2、1
- 二叉搜索树中序遍历的结果是升序或降序的
- 中序遍历左子树、根结点、中序遍历右子树
/**
* 中序遍历
*/
@SuppressWarnings("unused")
// 公开的方法
public void inorderTravesal() {
inorderTravesal(rootNode);
}
// 私有的方法
private void inorderTravesal(Node<E> node) {
if(node == null) return;
inorderTravesal(node.liftnode);
System.out.println(node.element);
inorderTravesal(node.rightnode);
}
后序遍历
- 访问顺序
- 后序遍历左子树、后序遍历右子树、根结点
- 1、3、2、5、4、8、10、12、11、9、7
- 后序遍历左子树、后序遍历右子树、根结点
/**
* 后序遍历
*/
@SuppressWarnings("unused")
// 公开的方法
public void psotorderTravesal() {
psotorderTravesal(rootNode);
}
// 私有的方法
private void psotorderTravesal(Node<E> node) {
if(node == null) return;
// 先左再右后自身
psotorderTravesal(node.liftnode);
psotorderTravesal(node.rightnode);
System.out.println(node.element);//自身
}
后序遍历
- 访问顺序
- 从上到下、从左到右依次访问每一个结点
- 7、4、9、2、5、8、11、1、3、10、12
- 实现思路:使用队列(先入先出)
1.将根结点入队
2.循环执行以下操作,直到队列为空- 将队头结点A出队,进行访问
- 将A的左子节点入队
- 将A的右子节点入队
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?