1.题目如下:
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.代码如下:
/**
* 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:
//思路:使用递归; 按照中序的顺序来遍历子结点,然后每次遍历都返回该结点的值
vector<int> inorderTraversal(TreeNode* root) {
if(root==nullptr){
return {};
}
vector<int> res;
getInorder(root,res);
return res;
}
void getInorder(TreeNode* root,vector<int> &res){
//先遍历左子结点
if(root->left !=nullptr){
getInorder(root->left,res);
}
//返回结点的值
res.push_back(root->val);
//遍历右子结点
if(root->right!=nullptr){
getInorder(root->right,res);
}
}
// 方法二:迭代,使用栈来显式的遍历
/*
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> stk;
while (root != nullptr || !stk.empty()) {
while (root != nullptr) {
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
res.push_back(root->val);
root = root->right;
}
return res;
}
*/
};