class Solution { public: bool traversal(TreeNode* cur, int distination ,int cur2) { if (!cur->left && !cur->right && distination == cur2) return true; // 遇到叶子节点,并且计数为0 if (!cur->left && !cur->right && distination != cur2) return false; // 遇到叶子节点直接返回 if (cur->left) { // 左 if (traversal(cur->left, distination , cur2 +cur->left->val )) return true; } if (cur->right) { // 右 if (traversal(cur->right,distination , cur2 + cur->right->val)) return true; } return false; } public: int cur1 = 0; bool hasPathSum(TreeNode* root, int sum) { if (root == NULL) return false; if( root->val == sum ) return true; if( root->val != sum ) return false; return traversal(root, sum , 0 ); } };
时间: 2023-12-20 22:04:38 浏览: 37
这是一段 C++ 代码,实现了二叉树中是否存在从根节点到叶子节点的路径,使得路径上所有节点值的和等于给定的目标和。
具体实现是通过递归遍历二叉树,对于每个非叶子节点,分别递归遍历其左右子树,将当前节点值加入计数器 cur2 中,并传递到下一级递归中。当遇到叶子节点时,判断当前计数器值是否等于目标和 distination,如果相等则返回 true,否则返回 false。
整个算法的时间复杂度为 O(n),其中 n 是二叉树的节点数,因为需要遍历每个节点。空间复杂度为 O(h),其中 h 是二叉树的高度,因为递归调用会使用 O(h) 的栈空间。
相关问题
/** * 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: bool isSameTree(TreeNode* p, TreeNode* q) { if(p == nullptr && q == nullptr) return true; else if(p->val != q->val) return false; isSameTree(p->left,q->left); isSameTree(p->right,q->right); return true; } };
这是一段 C++ 代码,用于比较两个二叉树是否相同。其中,TreeNode 是一个二叉树节点的结构体,包含一个整数值 val 和两个指向左右子树的指针。isSameTree 函数接受两个 TreeNode 指针作为参数,分别表示要比较的两棵二叉树的根节点。
在函数内部,首先判断两个根节点是否都为空,如果是,则返回 true,表示两棵树相同。如果其中一个根节点为空,另一个不为空,则返回 false,表示两棵树不同。否则,比较两个根节点的值是否相等,如果不相等,返回 false,表示两棵树不同。如果相等,则递归地比较两个根节点的左右子树是否相同。最终,如果左右子树都相同,返回 true,否则返回 false。
需要注意的是,这段代码没有对递归调用 isSameTree 函数的返回值进行处理,因此在比较左右子树时,可能会返回错误的结果。正确的做法是将递归调用的结果存储在一个变量中,然后在最后返回这个变量。
class Solution { public: bool containsDuplicate(vector<int>& nums) { return set<int>(nums.begin(), nums.end()).size() != nums.size(); } };返回类型不是bool吗,这是什么
这段代码是一个用于检查给定整数数组中是否存在重复元素的函数 `containsDuplicate` 的实现。该函数的返回类型是布尔类型,表示是否存在重复元素。
代码中使用了 `std::set` 容器来实现,通过将整数数组转换为 `set` 容器,利用 `set` 的特性自动去重,再比较 `set` 的大小与原始数组的大小来判断是否存在重复元素。如果存在重复元素,`set` 的大小会小于原始数组的大小,因此返回值为 `true`;否则,返回值为 `false`。
所以,这段代码的返回类型确实是布尔类型,表示是否存在重复元素。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)