力扣#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;
}
};