二叉树习题精讲-单值二叉树

2024-05-29 06:28
文章标签 二叉树 习题 精讲 单值

本文主要是介绍二叉树习题精讲-单值二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单值二叉树

965. 单值二叉树 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/univalued-binary-tree/description/

判断这里面的所有数值是不是一样

方案1:遍历

方案2:拆分子问题

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isUnivalTree(struct TreeNode* root) 
{//条件满足if(root == NULL){return true;}//判断条件int ret=root->val;if(root->left != NULL && root->left->val != root->val){return false;}   if(root->right != NULL && root->right->val != root->val){return false;}   return isUnivalTree(root->left) && isUnivalTree(root->right);
}

解释:

  1. bool isUnivalTree(struct TreeNode* root)

    • 这是函数的声明行,定义了一个名为 isUnivalTree 的函数,它接收一个指向 TreeNode 结构体的指针 root 作为参数。函数返回一个布尔值 bool,如果树是单值树则返回 true,否则返回 false
  2. if(root == NULL)

    • 这行代码检查传入的 root 指针是否为 NULL。如果是 NULL,表示当前节点为空,空树被认为是单值树,因此返回 true
  3. int ret=root->val;

    • 这行代码将当前节点 root 的值赋给变量 ret。这个值将用于和当前节点的左右子节点的值进行比较。
  4. if(root->left != NULL && root->left->val != root->val)

    • 这行代码检查当前节点的左子节点是否存在,并且如果存在,它的值是否与当前节点的值 root->val 不同。如果是这样,树不是单值树,因此返回 false
  5. if(root->right != NULL && root->right->val != root->val)

    • 类似地,这行代码检查当前节点的右子节点是否存在,并且如果存在,它的值是否与当前节点的值 root->val 不同。如果是这样,树不是单值树,因此返回 false
  6. return isUnivalTree(root->left) && isUnivalTree(root->right);

    • 如果当前节点的左右子节点的值都与当前节点的值相同,这行代码递归地调用 isUnivalTree 函数,分别检查左子树和右子树是否也是单值树。如果两个子树都是单值树,那么整个树也是单值树,因此返回 true;否则,返回 false

总结来说,isUnivalTree 函数通过递归的方式检查每个节点的值是否与其子节点的值相同。如果树中的所有节点的值都相同,那么函数返回 true,表示这是一个单值树;如果任何节点的子节点的值与它不同,函数返回 false,表示这不是一个单值树。

这篇关于二叉树习题精讲-单值二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

剑指offer(C++)--平衡二叉树

题目 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 class Solution {public:bool IsBalanced_Solution(TreeNode* pRoot) {if(pRoot==NULL)return true;int left_depth = getdepth(pRoot->left);int right_depth = getdepth(pRoot->rig

二叉树三种遍历方式及其实现

一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 3、对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 在满二叉树中若其深度为h,则其所包含

LeetCode 算法:二叉树的中序遍历 c++

原题链接🔗:二叉树的中序遍历 难度:简单⭐️ 题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 提示: 树中节点数目在范围 [0, 100] 内 -100 <= Node.

《学习OpenCV》课后习题解答7

题目:(P105) 创建一个结构,结构中包含一个整数,一个CvPoint和一个 CvRect;称结构体为“my_struct”。 a. 写两个函数:void Write_my_strct(CvFileStorage* fs, const char * name, my_struct* ms) 和 void read_my_struct(CvFileStorage* fs, CvFileNode

《学习OpenCV》课后习题解答6

题目:(P104) 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvsplit()将图像分割成红,绿,蓝三个单通道图像。 a.找到并显示绿图。 b.克隆这个绿图两次(分别命名为clone1和clone2)。 c.求出这个绿色平面的最大值和最小值。 d.将clone1的所有元素赋值为theash=(unsigned char)((最大值-最小值)/2.0)。 e.将clone

《学习OpenCV》课后习题解答5

题目:(P104) 为一个图像创建多个图像头。读取一个大小至少为100*100的图像。另创建两个图像头并设置它们的origion,depth,nChannels和widthStep属性同之前读取的图像一样。在新的图像头中,设置宽度为20,高度为30.最后,将imageData指针分别指向像素(5,10)和(50,60)像素位置。传递这两个新的图像头给cvNot()。最后显示最初读取的图像,在那个

《学习OpenCV》课后习题解答3

题目:(P104) 创建一个大小为100*100的三通道RGB图像。将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面。 解答: #include "cv.h" #include "highgui.h" int main(int argc, char** argv) {IplImage* img = cvCreateImage(cvSize(100,

《学习OpenCV》课后习题解答2

题目:(P104) 创建一个拥有三个通道的二维字节类型矩阵,大小为100*100,并将所有值赋为0。通过函数cvPtr2D将指针指向中间的通道(“绿色”)。以(20,5)与(40,20)为顶点间画一个绿色的长方形。 解答: (此题的关键在于懂得函数cvPtr2D的用法) #include "cv.h" #include "highgui.h" int main(int argc, c

C++ 重建二叉树(递归方法)

/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/#include <vector>class Solution {public:/*** 代码

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶