我的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解题报告:
思路二:模拟系统栈的递归过程
在我们思路一的实现中,我们利用递归的性质实现了二叉树的中序遍历,其实本质上是利用了系统栈后进先出的性质。
那么如果我们自己创建一个栈来模拟系统栈