圖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;
}
};