513 找树左下角的值
题目链接:找树左下角的值
思路
这道题目使用广度优先搜索(层次遍历)的解法比较简单,也容易思考。因为层次遍历本就是一层一层遍历,我们只需要将每层的第一个节点的值保存即可。
class Solution {
public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> que;if(root != nullptr) que.push(root);int result = 0;while(!que.empty()){int size = que.size();for(int i=0; i<size; i++){TreeNode* node = que.front();que.pop();if(i==0) result = node->val;if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return result; }
};
112 路径总和
题目链接:路径总和
思路
思路很简单,就是从根节点开始一条路一条路的遍历,遍历到叶子节点时,看所有节点之和等不等于targetSum,如果不等于则往上回退,走另一条路。
class Solution {
public:bool traversal(TreeNode* cur, int count){if (cur->left == nullptr && cur->right == nullptr && count == 0){return true;}if(cur->left == nullptr && cur->right == nullptr){return false; // 虽是叶子节点,但是不等于targetSum}if(cur->left){count -= cur->left->val;if (traversal(cur->left, count)) return true;count += cur->left->val;}if(cur->right){count -= cur->right->val;if (traversal(cur->right, count)) return true;count += cur->right->val; }return false;}bool hasPathSum(TreeNode* root, int targetSum) {if(root == nullptr) return false;return traversal(root, targetSum-root->val);}
};
参考链接
- https://programmercarl.com/0112.%E8%B7%AF%E5%BE%84%E6%80%BB%E5%92%8C.html#%E6%80%9D%E8%B7%AF