1530. 好葉子節點對的數量
阿新 • • 發佈:2021-01-08
題目描述:
給你二叉樹的根節點 root 和一個整數 distance 。
如果二叉樹中兩個 葉 節點之間的 最短路徑長度 小於或者等於 distance ,那它們就可以構成一組 好葉子節點對 。
返回樹中 好葉子節點對的數量 。
解題思路:
對於任何的節點node,分別求節點node的左右葉子節點到node的距離,再計算每個左葉子節點與右葉子節點的距離。
/** * 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 { int res_dfs = 0; public int countPairs(TreeNode root, int distance) { if(root != null){ countnum(root, distance); countPairs(root.left, distance); countPairs(root.right, distance); } return res_dfs; } public void countnum(TreeNode root, int distance){ int start = 0; //計算節點root的到左右葉子節點的距離 List<Integer> leftLen = new ArrayList<Integer>(); List<Integer> rightLen = new ArrayList<Integer>(); if(root != null){ if(root.left != null){ countLen(root.left, start + 1, distance, leftLen); } if(root.right != null){ countLen(root.right, start + 1, distance, rightLen); } } for(int i=0; i<leftLen.size(); i++){ for(int j=0; j<rightLen.size(); j++){ int count = leftLen.get(i) + rightLen.get(j); if(count < distance || count == distance){ res_dfs = res_dfs + 1; } } } } public void countLen(TreeNode root,int len ,int distance,List<Integer> leaflen){ if(len < distance){ if(root.left != null){ countLen(root.left, len+1, distance, leaflen); } if(root.right != null){ countLen(root.right, len+1, distance, leaflen); } if(root.left == null & root.right == null){ leaflen.add(len); } } } }