LeetCode·每日一题·1302.层数最深叶子节点的和·DFS·BFS
2023-09-27 14:26:29 时间
链接:https://leetcode.cn/problems/deepest-leaves-sum/solution/-by-xun-ge-v-u1y5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
解题思路
对于树的相关问题基本上都可以使用递归解决,对于递归能解决的问题那么迭代也基本上是可以的
- 递归->深度优先搜索
- 迭代->广度优先搜索
【深度优先搜索】
使用递归搜索每一个节点,以高度为判断条件:
- 高度未达到当前已检索的最深高度->不处理
- 高度正好达到当前已检索的最深高度->累加
- 高度超过当前已检索的最深高度->重新累加
最后输出累加和即可
【广度优先搜索】
使用迭代进行树的层次遍历,累加最后一层即可
对于迭代可以不需要那么多的判断,因为层次遍历本身就是以树的高度为条件
代码
【深度优先搜索】
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void dfs(struct TreeNode* node, int level, int* maxLevel, int* sum) {
if (node == NULL) {
return;
}
if (level > *maxLevel) {//高度超过当前已检索的最深高度->重新累加
*maxLevel = level;
*sum = node->val;
} else if (level == *maxLevel) {//高度正好达到当前已检索的最深高度->累加
*sum += node->val;
}
//高度未达到当前已检索的最深高度->不处理
dfs(node->left, level + 1, maxLevel, sum);
dfs(node->right, level + 1, maxLevel, sum);
}
int deepestLeavesSum(struct TreeNode* root){
int maxLevel = -1;//当前最高高度
int sum = 0;//累和
dfs(root, 0, &maxLevel, &sum);
return sum;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/deepest-leaves-sum/solution/-by-xun-ge-v-u1y5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【广度优先搜索】
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int deepestLeavesSum(struct TreeNode* root){
int sum;
struct TreeNode * queue[10000];//标准层次遍历过程,可以把这个摸版背下来
int left = 0;
int right = 0;
queue[right++] = root;
while(left < right)
{
int r = right;
sum = 0;
while(left < r)
{
sum += queue[left]->val;
if(queue[left]->left)
{
queue[right++] = queue[left]->left;
}
if(queue[left]->right)
{
queue[right++] = queue[left]->right;
}
left++;
}
}
return sum;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/deepest-leaves-sum/solution/-by-xun-ge-v-u1y5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- leetcode 46-Permutations and 47-Permutations II
- [LeetCode] Unique Binary Search Trees
- [LeetCode]剑指 Offer 22. 链表中倒数第k个节点
- [LeetCode]面试题 02.02. 返回倒数第 k 个节点
- LeetCode | 删除有序数组中的重复项【双指针实现】
- 【leetcode】日积月累,每日一题--24. 两两交换链表中的节点(DayDayUp 14)
- 【LeetCode】145. Binary Tree Postorder Traversal (3 solutions)
- 【LeetCode】91. Decode Ways
- 【Leetcode】222.完全二叉树的节点个数
- [LeetCode] 1147. Longest Chunked Palindrome Decomposition 段式回文
- [LeetCode] Trim a Binary Search Tree 修剪一棵二叉搜索树
- [LeetCode] 663. Equal Tree Partition 划分等价树
- [LeetCode] 450. Delete Node in a BST 删除二叉搜索树中的节点
- [LeetCode] Delete Node in a Linked List 删除链表的节点
- [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点
- [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针之二
- 【leetcode】692. 前K个高频单词
- leetcode算法237.删除链表中的节点