单值二叉树(2021-8-8)

Posted 爪哇Coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单值二叉树(2021-8-8)相关的知识,希望对你有一定的参考价值。

单值二叉树

2021-8-8打卡LeetCode的第965题--单值二叉树。这个题相对简单一些,树的相关的问题一般都离不开遍历的问题,今天我们就换一种遍历方式来解决这个问题。

题目解析

给你一颗二叉树,判断这棵二叉树所有节点的值是否都是相等的,如果所有的都相同,那么就是一棵单值二叉树,只要存在一个节点不相同,那么这就是一棵非单值二叉树。对于这种遍历,同时又是判断二叉树中的某个节点是否满足要求,个人建议用宽搜层序遍历区间去解决,类似找最短路径问题,这样我们可以快速的定位到某一个具体的节点。

解题思路

BFS层序遍历,我们直接套用BFS的模板框架,我们需要做的就是,对框架的逻辑稍作改变即可。当我们从队列中拿到一个节点时,我们需要把它的左右孩子入队,入队之前我对它的左右孩子做判断。如果它的左右孩子不为空,并且它的左右孩子的值都等于它的值,那么我们就继续入队;如果它的左右孩子不为空,而且存在和它的值val不相等,那么这就是一棵非单值二叉树。这样可以保证我们可以快速的定位到某一个具体的节点,从而对他进行判断,同时他里面存在一个值得传递性效果嘛,可以把根节点的"值传递下去"(比较它的左右孩子的时候就是一个值传递的效果)

代码实现


class Solution {
    public boolean isUnivalTree(TreeNode root) {
      LinkedList<TreeNode> queue=new LinkedList<>();
      queue.offer(root);
      return bfs(queue);
    }
    //宽搜模板框架
    public boolean bfs(LinkedList<TreeNode> queue){
        while(!queue.isEmpty()){
          for(int i=queue.size();i>=0;i--){
             //出队
              TreeNode root= queue.poll();
              //为空,啥也不做
              if(root==null){
                  continue;
              }
              //如果左孩子不为空,并且和它的值不等,那就是非单值二叉树
              if(root.left!=null&&root.val!=root.left.val){
                  return false;
              }
              //如果右孩子非空,并且和它的值不等,那也是非单值二叉树
              if(root.right!=null&&root.val!=root.right.val){
                  return false;
              }
              //左右孩子继续入队
              queue.offer(root.left);
              queue.offer(root.right);
          }
      }
      return true;
    }
}


以上是关于单值二叉树(2021-8-8)的主要内容,如果未能解决你的问题,请参考以下文章

965. 单值二叉树

单值二叉树

单值二叉树:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。

力扣——单值二叉树

数据结构之二叉树基础OJ练习单值二叉树

数据结构二叉树经典基础习题