1. 程式人生 > 其它 >【LeetCode】965. 單值二叉樹

【LeetCode】965. 單值二叉樹

題目描述

難度:【簡單】
標籤:【二叉樹】

如果二叉樹每個節點都具有相同的值,那麼該二叉樹就是單值二叉樹。

只有給定的樹是單值二叉樹時,才返回 true;否則返回 false。

示例

示例 1

輸入:[1,1,1,1,1,null,1]
輸出:true

示例 2

輸入:[2,2,2,5,2]
輸出:false

題目大意

所有二叉樹的節點的值都一樣,返回 true,否則返回 false 。

解題

站在其中一個節點(a)的角度:

  • a 的左右2個子節點的值相等,且 a 的值等於子節點的值
  • 如果 a 的某一邊的節點是null,那麼忽略,只考慮另一邊的結果
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isUnivalTree(TreeNode root) {
        if (root == null) {
            return false;
        }
        // 檢查左子節點
        boolean checkLeft = (root.left == null) || ((root.left.val == root.val) && isUnivalTree(root.left));
        // 檢查右子節點
        boolean checkRight = (root.right == null) || ((root.right.val == root.val) && isUnivalTree(root.right));

        return checkLeft && checkRight; 
    }
}

明確函式的「定義」是什麼,然後相信這個定義,利用這個定義推導最終結果,絕不要跳入遞迴的細節。

--不要用肉體的勤奮,去掩蓋思考的懶惰--