從根到葉的二進制數之和

從根到葉的二進制數之力扣


題目

從根到葉的二進制數之和(力扣:1022 )

給出一棵二叉樹,其上每個結點的值都是 0 或 1 。每一條從根到葉的路徑都代表一個從最高有效位開始的二進制數。例如,如果路徑爲 0 -> 1 -> 1 -> 0 -> 1,那麼它表示二進制數 01101,也就是 13 。

對樹上的每一片葉子,我們都要找出從根到該葉子的路徑所表示的數字。

以 10^9 + 7 爲模,返回這些數字之和。

分析

使用遞歸求解,結束條件爲:

  1. 當root等於null時,返回0。
  2. sum等於當前值乘以2(表示左移一位)+ 當前節點值。當前節點爲葉子節點是,返回sum。
  3. 最後遍歷左子樹和右子樹,結果爲左右子樹的結果相加,並返回。

代碼實現

    /**
     * 1022. 從根到葉的二進制數之和
     * @param root
     * @return
     */
    public int sumRootToLeaf(TreeNode root) {
        return sumRootToLeafDfs(root, 0);
    }

    private int sumRootToLeafDfs(TreeNode root, int sum){
        if (root == null){
            return 0;
        }
        sum = sum * 2 + root.val;
        if (root.left == null && root.right == null){
            return sum;
        }
        return sumRootToLeafDfs(root.left, sum) + sumRootToLeafDfs(root.right, sum);
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章