二叉树题目:祖父结点值为偶数的结点和

2023-12-01 17:45

本文主要是介绍二叉树题目:祖父结点值为偶数的结点和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法一
    • 思路和算法
    • 代码
    • 复杂度分析
  • 解法二
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:祖父结点值为偶数的结点和

出处:1315. 祖父结点值为偶数的结点和

难度

5 级

题目描述

要求

给定二叉树的根结点 root \texttt{root} root,返回祖父结点值为偶数的结点值之和。如果不存在祖父结点值为偶数的结点,返回 0 \texttt{0} 0

一个结点的祖父结点是指该结点的父结点的父结点(如果存在)。

示例

示例 1:

示例 1

输入: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] \texttt{root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]} root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
输出: 18 \texttt{18} 18
解释:图中红色结点的祖父结点值为偶数,蓝色结点为值为偶数的祖父结点。

示例 2:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rV1Pv0SA-1644407789559)(https://assets.leetcode.com/uploads/2021/08/10/even2-tree.jpg)]

输入: root = [1] \texttt{root = [1]} root = [1]
输出: 0 \texttt{0} 0

数据范围

  • 树中结点数目在范围 [1, 10 4 ] \texttt{[1, 10}^\texttt{4}\texttt{]} [1, 104]
  • 1 ≤ Node.val ≤ 100 \texttt{1} \le \texttt{Node.val} \le \texttt{100} 1Node.val100

解法一

思路和算法

可以使用深度优先搜索寻找所有祖父结点值为偶数的结点,并计算这些结点值之和。为了定位到祖父结点,在深度优先搜索的过程中需要记录访问的结点的父结点和祖父结点。对于每个非空结点,如果其祖父结点值为偶数,则将当前结点值加到总和中。

由于深度优先搜索只能从根结点开始遍历,而根结点没有祖父结点,因此对于每个访问到的结点,需要将当前结点作为祖父结点,寻找孙结点。当前结点的每个非空子结点的子结点即为当前结点的孙结点。在访问一个结点之后,继续访问该结点的子结点,直到遍历结束时即可得到祖父结点值为偶数的结点和。

代码

class Solution {int sum = 0;public int sumEvenGrandparent(TreeNode root) {TreeNode left = root.left, right = root.right;if (left != null) {dfs(root, left, left.left);dfs(root, left, left.right);}if (right != null) {dfs(root, right, right.left);dfs(root, right, right.right);}return sum;}public void dfs(TreeNode grandparent, TreeNode parent, TreeNode node) {if (node == null) {return;}if (grandparent.val % 2 == 0) {sum += node.val;}dfs(parent, node, node.left);dfs(parent, node, node.right);}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是栈空间,取决于二叉树的高度,最坏情况下二叉树的高度是 O ( n ) O(n) O(n)

解法二

思路和算法

也可以使用广度优先搜索计算祖父结点值为偶数的结点和。从根结点开始遍历所有的结点,对于每个结点,如果当前结点值为偶数且当前结点存在孙结点,则将孙结点值加到总和中。

代码

class Solution {public int sumEvenGrandparent(TreeNode root) {int sum = 0;Queue<TreeNode> queue = new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode node = queue.poll();TreeNode left = node.left, right = node.right;if (node.val % 2 == 0) {if (left != null) {if (left.left != null) {sum += left.left.val;}if (left.right != null) {sum += left.right.val;}}if (right != null) {if (right.left != null) {sum += right.left.val;}if (right.right != null) {sum += right.right.val;}}}if (left != null) {queue.offer(left);}if (right != null) {queue.offer(right);}}return sum;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是队列空间,队列内元素个数不超过 n n n

这篇关于二叉树题目:祖父结点值为偶数的结点和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442077

相关文章

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

数据结构--二叉树(C语言实现,超详细!!!)

文章目录 二叉树的概念代码实现二叉树的定义创建一棵树并初始化组装二叉树前序遍历中序遍历后序遍历计算树的结点个数求二叉树第K层的结点个数求二叉树高度查找X所在的结点查找指定节点在不在完整代码 二叉树的概念 二叉树(Binary Tree)是数据结构中一种非常重要的树形结构,它的特点是每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构使得二叉树在数据存储和查找等方面具