226. Invert Binary Tree
Analysis
题意很简单,翻转二叉树。
Code
dfs
1 | class Solution { |
bfs
1 | class Solution { |
也可以写的更简单一点:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(!root) return root;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()) {
TreeNode *tmp, *node = q.front(); q.pop();
tmp = node->left;
node->left = node->right;
node->right = tmp;
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
return root;
}
};
112. Path Sum
Analysis
判断根节点到叶子结点的路径长度是否与给定值相等。
Code
dfs
1 | class Solution { |
嗯,这样写,不够优雅,改一下:1
2
3
4
5
6
7
8class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(!root) return false;
if(!root->left && !root->right) return targetSum == root->val;
return hasPathSum(root->left, targetSum - root->val) || hasPathSum(root->right, targetSum - root->val);
}
};
bfs
1 | class Solution { |
使用 bfs 会麻烦一些,需要将所有根结点到叶子结点的路劲长度算出来,需要用队列来保存中间的计算结果,因为结点出队的顺序与根结点到这个结点的路劲长度是对应的。
Summary
树的题目有很多,有些题目很灵活,要多想想。不过本质都是一样的,那就是对树的遍历。