当前位置:网站首页>树形dp

树形dp

2022-07-04 06:13:00 热心市民薛先生

在这里插入图片描述
在这里插入图片描述
树形dp是二叉树形式的dp,本题要用个数组来保存当前节点的结果。
res[0] 表示不偷当前节点 res[1]表示偷当前节点

 public int rob(TreeNode root) {
    
        int[] res = recur(root);
        return Math.max(res[0],res[1]);
    }
    public int[] recur(TreeNode root){
    
        int []res = new int[2];
        当前节点为空 返回
        if(root == null) return res;
		递归左右节点
        int[] left = recur(root.left);
        int[] right = recur(root.right);
        不偷当前节点,可偷左右孩子节点
        res[0] = Math.max(left[0],left[1]) + Math.max(right[0],right[1]);
        偷当前节点,那么左右孩子节点不可偷,[0]代表不偷当前节点的值
        res[1] = root.val + left[0] + right[0]; 
        return res;
    }
原网站

版权声明
本文为[热心市民薛先生]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44311466/article/details/125585319