94:二叉树的中序遍历
创始人
2025-05-31 14:58:16

94:二叉树的中序遍历

总结

给定一个二叉树的根节点 root ,返回它的中序遍历 。

示例1:

img
输入:root = [1,null,2,3]
输出:[1,3,2]

示例2:

输入:root = []
输出:[]

示例3:

输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

进阶:

  • 递归算法很简单,你可以通过迭代算法完成吗?
思路与算法

什么是二叉树的中序遍历?

按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,可以直接用递归函数来模拟这一过程。

定义 inorder(root) 表示当前遍历到 root 节点的答案,那么按照定义,我们只要递归调用 inorder(root.left) 来遍历 root 节点的左子树,然后将 root 节点的值加入答案,再递归调用inorder(root.right) 来遍历 root 节点的右子树即可,递归终止的条件为碰到空节点。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void inorder(TreeNode* root, vector& res){if(!root){return;}inorder(root->left,res);res.push_back(root->val);inorder(root->right,res);}vector inorderTraversal(TreeNode* root) {vector res;inorder(root,res);return res;}
};
复杂度分析
  • 时间复杂度:O(n)O(n)O(n),其中n为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。
  • 空间复杂度:O(n)O(n)O(n),空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n)O(n)O(n)的级别。

相关内容

热门资讯

重组胶原蛋白暗战:锦波生物背靠... 文 | 坤舆商业观察,作者 | 高见重组胶原蛋白,这个曾被视为小众科研的名词,正成为医美行业新的流量...
芯迈半导体IPO:小米宁王押注... 文 | 港股研究社近日,功率半导体企业芯迈半导体技术(杭州)股份有限公司(简称“芯迈半导体”)向港交...
解决社会不平等的中国可能 文 | 沈素明2024年,当大洋彼岸的精英们还在为3000人的“基本收入实验”争论不休,甚至撕破脸皮...
立体广告的“出圈”与“出格” 文 | 数字品牌榜前段时间,脉动将自家的立体广告投放到了全国各地的公交站,竟意外吵上了热搜。有网友觉...