LeetCode094——二叉树的中序遍历

本文详细介绍了LeetCode第094题《二叉树的中序遍历》的五种解法,包括递归实现、模拟系统栈、手工计算过程、另一种非递归形式以及Morris遍历。每种方法都分析了其时间复杂度和空间复杂度,附有JAVA代码实现。
摘要由CSDN通过智能技术生成

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/description/

题目描述:

知识点:二叉树、中序遍历、递归

思路一:递归实现

学过数据结构的人都知道,二叉树天然的具有递归性质,因为二叉树的定义就是用递归的形式定义的。因此,在中序遍历二叉树的时候我们完全可以采用递归算法。

所谓中序遍历,就是先去访问该节点的左孩子,再访问该节点和该节点的右孩子。

由于要遍历每一个节点,这样实现的时间复杂度是O(n)级别的,其中n为二叉树中的节点个数。而对于空间复杂度,由于递归存在对系统栈的调用,而这里递归层数就是树的高度,因此空间复杂度是O(h)级别的,其中h为树的高度。

JAVA代码:

public class Solution {

	public List<Integer> inorderTraversal(TreeNode root) {
		List<Integer> list = new ArrayList<>();
		inorderTraversal(root, list);
		return list;
	}
	
	private void inorderTraversal(TreeNode treeNode, List<Integer> list) {
		if(treeNode == null) {
			return;
		}
		inorderTraversal(treeNode.left, list);
		list.add(treeNode.val);
		inorderTraversal(treeNode.right, list);
	}
}

LeetCode解题报告:

思路二:模拟系统栈的递归过程

在我们思路一的实现中,我们利用递归的性质实现了二叉树的中序遍历,其实本质上是利用了系统栈后进先出的性质。

那么如果我们自己创建一个栈来模拟系统栈

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值