递归实现二叉树的遍历——Java版

这篇博客详细介绍了如何使用Java递归实现二叉树的先序、中序和后序遍历。通过示例代码展示了每种遍历方法的逻辑,帮助读者理解二叉树遍历的基本思想。先序遍历顺序为根-左-右,中序遍历顺序为左-根-右,后序遍历顺序为左-右-根。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归实现二叉树的遍历——Java版

先说说二叉树的几种常见遍历方式:
一棵二叉树由三个部分组成,即:根节点,左子树,右子树
我们分别用D,L,R来表示:
D -> 根节点
L -> 左子树
R -> 右子树

二叉树的遍历方式有6种:①DLR、②DRL、③LDR、④LRD、⑤RDL、⑥RLD
而最常看到的往往是以下三种:
先序遍历:DLR
中序遍历:LDR
后序遍历:LRD

思路:运用递归的方式,从节点本身出发进行遍历,在每个层级的我们都会计算一些值,将其传给相应的下一个节点。
简单的说就是带参数的方法自己调用自己的过程
(借助leetbook上的文段解释一下)
具体可以参考以下链接:
链接:https://leetcode-cn.com/leetbook/read/data-structure-binary-tree/xefb4e/
源码在下面,供大家参考

先序遍历:

输出顺序:D->L->R
下面展示一些 内联代码片

// An highlighted block
import java.util.List;
import java.util.ArrayList;

public class Solution {
	public static void main(String[]args) {
		TreeNode node1=new TreeNode(1);
		node1.right = new TreeNode(3);
		Solution sol = new Solution();
		System.out.println(sol.preorderTraversal(node1));
	}
	public List<Integer> preorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<Integer>();
		preOrder(list,root);
		return list;
	}
	public void preOrder(List<Integer> list,TreeNode root) {
		if(root == null) {
			return;
		}
		list.add(root.val);
		preOrder(list,root.left);
		preOrder(list,root.right);
	}
}

中序遍历:

输出顺序:L->D->R

// An highlighted block
import java.util.ArrayList;
import java.util.List;
public class Solution {
	public static void main(String[]args) {
		Solution sol = new Solution();
		TreeNode node1 = new TreeNode(1);
		node1.left = new TreeNode(2);
		node1.right = new TreeNode(3);
		node1.right.left = new TreeNode(4);
		System.out.println(sol.inorderTraversal(node1));
	}
	public List<Integer> inorderTraversal(TreeNode root) {
		List<Integer> list = new ArrayList<>();
		inOrder(list,root);
		return list;
	}
	public void inOrder(List<Integer> list,TreeNode root) {
		if(root == null) {
			return;
		}
		inOrder(list,root.left);
		list.add(root.val);
		inOrder(list,root.right);
	}
}

后序遍历:

输出顺序:L->R->D

// An highlighted block
import java.util.ArrayList;
import java.util.List;

public class Solution {
	public static void main(String[]args) {
		Solution sol = new Solution();
		TreeNode node = new TreeNode(1);
		node.left=new TreeNode(2);
		node.right=new TreeNode(3);
		System.out.println(sol.postorderTraversal(node));
	}
	public List<Integer> postorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<>();
		postOrder(list,root);
		return list;
	}
	public void postOrder(List<Integer> list,TreeNode root) {
		if(root == null) {
			return;
		}
		postOrder(list,root.left);
		postOrder(list,root.right);
		list.add(root.val);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值