# 题目描述
给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有** 不足节点 **,并返回最终二叉树的根节点。
假如通过节点node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为 不足节点 ,需要被删除。
叶子节点,就是没有子节点的节点。
提示:
- 树中节点数目在范围 
[1, 5000]内 -105 <= Node.val <= 105-109 <= limit <= 109
# 测试用例
用例1:
 
- 输入:root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1
 - 输出:[1,2,3,4,null,null,7,8,9,null,14]
 
用例2:

- 输入:root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22
 - 输出:[5,4,8,11,null,17,4,7,null,null,null,5]
 
用例3:

- 输入:root = [1,2,-3,-5,null,4,null], limit = -1
 - 输出:[1,null,-3,4]
 
# 代码实现
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} limit
 * @return {TreeNode}
 */
var sufficientSubset = function(root, limit) {
    // 先序遍历,同时记录和
  	// 注意:空节点返回false,因为此时false的效果就跟返回Null是一样的
    // 大于等于limit 则不是不足结点 返回true 不删除
    // 小于limit 则是不足结点 返回false 要删除
    // 最后返回的是 —— 左右子树有true就返回true,同时为false返回false
    let traversal = (node, sum, limit) => {
        // 处理空结点
        if(node == null){
            return false;
        }
        // 处理叶子结点
        if(node.left == null && node.right == null){
            return sum + node.val >= limit;
        }
        
        const leftSub = traversal(node.left, sum + node.val, limit);
        const rightSub = traversal(node.right, sum + node.val, limit);
        // 是不足结点就删除
        if(!leftSub){
            node.left = null;
        }
        if(!rightSub){
            node.right = null;
        }
        console.log("leftSub:", leftSub);
        console.log("rightSub: ", rightSub);
        console.log("test: ", leftSub || rightSub);
        return leftSub || rightSub;
    }
    const res = traversal(root, 0, limit);
    // 判断最后是否为空
    return res ? root : null;
};
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50