题目:
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
示例:
输入:[1,1,1,1,1,null,1]
输出:true
方法一:递归
算法分析:
感觉这道题白给。。
使用递归:
递归三要素:
1、终止条件:当root==null时return true
2、返回值:显然返回的是该树是否为单值树,即返回布尔类型
3、函数的意义:判断是否为单值树
那么,如果一颗树的左子树和右子树有一个不为单值树,那该树肯定不为单值树,也即需满足,根节点和左子节点的值须相等,且左子树和右子树均为单值树,才返回true
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isUnivalTree(TreeNode root) {
if(root==null){
return true;
}
boolean left = isUnivalTree(root.left);
boolean right = isUnivalTree(root.right);
if(root.left!=null && root.left.val != root.val){
return false;
}
if(root.right!=null && root.right.val != root.val){
return false;
}
return left && right;
}
}
方法二:BFS
无非就是判断是否有一个值和其父节点不同!
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isUnivalTree(TreeNode root) {
//BFS
Queue<TreeNode> queue = new LinkedList<>();
if (root==null){
return true;
}
queue.offer(root);
while (!queue.isEmpty()){
int size = queue.size();
for (int i=0;i<size;i++){
TreeNode temp = queue.poll();
if (temp.left!=null){
queue.offer(temp.left);
if (temp.val!= temp.left.val){ //此时若不等于父节点直接return false
return false;
}
}
if (temp.right!=null){
queue.offer(temp.right);
if(temp.val!=temp.right.val){//此时若不等于父节点直接return false
return false;
}
}
}
}
return true;
}
}