力扣94题:二叉树的中序遍历, 解题思路和步骤解析
问题描述
力扣第94题要求我们实现一个函数,该函数能够对给定的二叉树进行中序遍历,并返回遍历结果的列表。中序遍历是一种树遍历方式,其顺序为:先遍历左子树,访问根节点,遍历右子树。
解题思路分析
解决这个问题,我们可以考虑两种主要方法:递归和迭代。递归方法直观且易于实现,但可能会导致栈溢出的问题,特别是在处理深度很大的树时。迭代方法则需要使用栈来模拟递归过程,能够有效避免栈溢出的问题。
递归方法实现
递归方法的核心思想是先递归遍历左子树,访问根节点,递归遍历右子树。这种方法的代码实现简洁,但需要注意递归深度。
class Solution { public: vectorinorderTraversal(TreeNode root) { vectorresult; helper(root, result); return result; } void helper(TreeNode node, vector& result) { if (!node) return; helper(node->left, result); result.push_bACk(node->val); helper(node->right, result); } };
迭代方法实现
迭代方法使用栈来模拟递归过程,通过循环和条件判断来控制遍历顺序。这种方法能够有效避免递归导致的栈溢出问题,适用于处理大型数据。
class Solution { public: vectorinorderTraversal(TreeNode root) { vectorresult; stacks; TreeNode cur = root; while (cur || !s.empty()) { while (cur) { s.push(cur); cur = cur->left; } cur = s.top(); s.pop(); result.push_back(cur->val); cur = cur->right; } return result; } };
原创内容 转载请注明出处