二叉树OJ题:LeetCode--965.单值二叉树

简介: 二叉树OJ题:LeetCode--965.单值二叉树

1.题目介绍

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

2.实例演示

3.解题思路

在此之前我们先来了解一下关于二叉树的一些基本的知识:二叉树的遍历

1. 前序遍历-->根节点、左子树、右子树

2. 中序遍历-->左子树、根节点、右子树

3. 后序遍历-->左子树、右子树、根节点

4. 层序遍历-->一层一层逐步遍历(借助于队列实现)

以上实现方法可以参考:二叉树的链式结构

要判断一颗树的所有结点都是同一个值(单值二叉树),首先想到的方法就是逐一遍历各各结点,然后进行比较判断,但是遍历求解二叉树的问题很容易出现错误,由于二叉树的问题最终都要归结为每一棵树的子问题,所以我们需要采用转化子问题的方法:

在这里需要注意一个问题:如果一棵树为空树,符不符合单值二叉树的条件呢?答案是符合的,因为空树的根和它的左右子树都是空,符合单值的条件。不为空树的话,如果它的左右子树都存在,并且左右子树的结点和根节点的值一样,那么再判断它的左右子树的左右子树,如果不一样,那么直接返回false......这样子以此类推,直到访问完整个二叉树。

代码演示:

/**
 * 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;
    }
    //不为空树
    //左右子树不为空且结点的值不相等直接返回
    if(root->left && root->left->val != root->val)
    {
        return false;
    }
    if(root->right && root->right->val != root->val)
    {
        return false;
    }
    //若相等,则继续判断左右子树
    return isUnivalTree(root->left)
        && isUnivalTree(root->right);
}

代码图解:

注意:函数递归这里的返回值并不是一次性的返回到最外面,而是返回到上一层,一层一层的往上一层返回。

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!

目录
相关文章
|
2天前
leetcode代码记录(二叉树的所有路径
leetcode代码记录(二叉树的所有路径
7 0
|
2天前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
6 0
|
2天前
leetcode代码记录(二叉树的最小深度
leetcode代码记录(二叉树的最小深度
6 0
|
2天前
leetcode代码记录(二叉树的最大深度
leetcode代码记录(二叉树的最大深度
5 0
|
2天前
leetcode代码记录(翻转二叉树
leetcode代码记录(翻转二叉树
4 0
|
2天前
leetcode代码记录(二叉树的层序遍历
leetcode代码记录(二叉树的层序遍历
5 0
|
2天前
|
算法
leetcode代码记录(二叉树递归遍历
leetcode代码记录(二叉树递归遍历
6 0
|
2天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
6 0
|
2天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
7 0

热门文章

最新文章