单值二叉树你可能之前没见过,如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树,让我们通过一个真题来深刻了解它吧
【OJ - 二叉树】单值二叉树
LeetCode链接:单值二叉树
题目难度:简单
一、题目描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是 单值 二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
二、解题思路
二叉树的递归遍历,一般都会把问题拆分成 当前树(根节点) 和 子树,然后子树又进行拆分,来解决问题。
核心思路:
1.先判断当前节点是否为空,如果为空,返回 true(空树也满足单值二叉树的条件)
2.判断当前树是不是单值二叉树:
- 先判断当前节点的左孩子是否为空;
- 将 当前节点的值 与 左孩子的值 进行比较,如果相等,在右孩子不为空的情况下,继续与 右孩子的值 进行比较;
- 如果不相等,说明 当前树 不是单值二叉树,返回 false。
3.继续往下递归遍历,判断当前节点的左右子树是不是单值二叉树。
递归过程演示:
如果 a == b && a == c 为真,说明 1 是单值二叉树。
分而治之,不断迭代,先判断 1 是不是单值二叉树,再判断 2 是不是单值二叉树,最后判断 3 是不是单值二叉树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isUnivalTree(struct TreeNode* root){
// 1. 先判断当前节点是否为空
if(root == NULL)
{
return true; // 空树满足单值二叉树的条件
}
// 2. 判断当前节点和其左右孩子是否是单值二叉树
// 先判断当前节点的左孩子是否为空,并将当前节点的值与左孩子的值进行比较,看是否相等,
// 如果相等,则继续往下遍历;如果不相等,说明不是单值二叉树,则返回false。
if(root->left && root->val != root->left->val)
{
return false;
}
if(root->right && root->val != root->right->val)
{
return false;
}
// 3. 往下遍历,判断当前节点的左右子树是不是单值二叉树
return isUnivalTree(root->left) && isUnivalTree(root->right);
}
代码中有个小思路,我们 if 的条件写的是,如果左孩子不为空,且当前节点的值 != 左孩子的值,则返回 false,那为什么不写成:如果左孩子不为空,且当前节点的值 == 左孩子的值,则怎么怎么样……呢?因为写 ==,不能直接得出一个结果,而写 !=,就能得出结果 flase。
到此这篇关于C语言单值二叉树真题讲解的文章就介绍到这了,更多相关C语言单值二叉树内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言单值二叉树真题讲解


- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言qsort()函数的使用方法详解 2023-04-26
- ubuntu下C/C++获取剩余内存 2023-09-18
- C++ 数据结构超详细讲解顺序表 2023-03-25