题目: 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。
示例:
1.
2.
思路分析:
1.当拿到关于树的题目时,首先想到的就是递归和遍历,将树的前后节点进行比对,一旦有不等者,直接返回false,此方法下我建立了一个list,将遍历所得结点放入list,进行前后比较。
Code — 1
class Soultion {
List<Integer> list = new LinkedList<>();
public boolean isUnivalTree(TreeNode root) {
helper(root);
}
public void helper(TreeNode root) {
if (root == null) {
return;
}
list.add(root.val);
}
}
思路二
1.递归遍历每个结点,判断以每个结点为根的子树是否为单值二叉树。
2.若当前结点值等于根结点的数值,且左子树是也是单值二叉树,右子树也是单值二叉树,则当前树为单值二叉树,故向上返回该树的结果。
Code
class Solution {
int r;
public boolean isUnivalTree(TreeNode root) {
r == root.val;
return helper(root);
}
public boolean helper(TreeNode root) {
if (root == null) {
return true;
}
return (root.val == r) && helper(root.left) && helper(root.right);
}
}