迭代法
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
deque<TreeNode*> q;
vector<vector<int>> ans;
if (root) q.emplace_back(root);
while (!q.empty()) {
int size = q.size();
vector<int> path;
while (size--) {
TreeNode* cur = q.front();
q.pop_front();
path.emplace_back(cur->val);
if (cur->left) q.emplace_back(cur->left);
if (cur->right) q.emplace_back(cur->right);
}
ans.emplace_back(path);
}
return ans;
}
};
递归法
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
invertTree(root->left);
invertTree(root->right);
return root;
}
};
递归法
class Solution {
public:
bool dfs(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr) return true;
else if (left == nullptr && right != nullptr) return false;
else if (left != nullptr && right == nullptr) return false;
else if (left->val != right->val) return false;
return dfs(left->left, right->right) && dfs(left->right, right->left);
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr) return true;
return dfs(root->left, root->right);
}
};
递归 @cache记忆化搜索
class Solution:
def countVowelStrings(self, n: int) -> int:
def dfs(i, j): # i 表示以元音 i 结尾的字符串, j 表示字符串长度
if j == 1:
return 1
count = 0
for k in range(0, i + 1):
count += dfs(k, j - 1)
return count
ans = 0
for i in range(5):
ans += dfs(i, n)
return ans