力扣#94 树的中序遍历
图1 树的分支情况
通过图1观察到两个结论:
右节点只需要按顺序遍历
有左节点就一定需要一条“回溯”的链接
假设存在x,有x->left表示x的左节点,x->right表示x的右节点,x->val表示x的值
图2 流程
图3 结果
C++代码如下:
/**
* 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) {
vector<int> res;
while (root != nullptr) {
if (root->left == nullptr) {
res.push_back(root->val);
root = root->right;
} else {
TreeNode *tmp = root->left;
while (tmp->right != nullptr) {
tmp = tmp->right;
}
tmp->right = root;
root = root->left;
tmp->right->left = nullptr;
}
}
return res;
}
};
本文作者:SkySource
本文链接:https://www.cnblogs.com/SkySource/p/18076558
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步