145. Binary Tree Postorder Traversal
JAVA
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<Integer> ans = new LinkedList<>();
while (root != null) {
if (root.right == null) {
ans.addFirst(root.val);
root = root.left;
} else {
TreeNode next = root.right;
while (next.left != null && next.left != root) {
next = next.left;
}
if (next.left == null) {
ans.addFirst(root.val);
next.left = root;
root = root.right;
} else {
next.left = null;
root = root.left;
}
}
}
return ans;
}
}
C++
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
while (root) {
if (!root->right) {
ans.push_back(root->val);
root = root->left;
} else {
TreeNode* next = root->right;
while (next->left && next->left != root) {
next = next->left;
}
if (!next->left) {
ans.push_back(root->val);
next->left = root;
root = root->right;
} else {
next->left = nullptr;
root = root->left;
}
}
}
reverse(ans.begin(), ans.end());
return ans;
}
};
Comments
Post a Comment