加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

337. House Robber III

发布时间:2020-12-13 23:40:15 所属栏目:Linux 来源:网络整理
导读:一、题目 1、审题 2、分析 给出一棵二叉树,取二叉树中的节点值,其中不能获取相邻层的二叉树节点。 ? 二、解答 1、思路 方法一、 分两种情况, 情况一: root.val + root.left.left.val + root.left.right.val + root.right.left.val + root.right.right.va

一、题目

  1、审题 

  

  2、分析

    给出一棵二叉树,取二叉树中的节点值,其中不能获取相邻层的二叉树节点。

?

二、解答

  1、思路

    方法一、

      分两种情况, 情况一: root.val + root.left.left.val + root.left.right.val + root.right.left.val + root.right.right.val?

      情况二: root.left.val + root.right.val

      然后取这两种情况的最大值,进行递归!

?

    public int rob(TreeNode root) {
        if(root == null)
    		return 0;
    	
    	int val = 0;
    	if(root.left != null) 
    		val += rob(root.left.left) + rob(root.left.right);
    	
    	if(root.right != null)
    		val += rob(root.right.left) + rob(root.right.right);
    	
    	return Math.max(val + root.val,rob(root.left) + rob(root.right));
    }

  

  方法二、

    由于方法一中,每一次递归有很多重复的计算。采用 Map <Node, val> 记录当前节点对应的最大值!减少递归的重复计算!

    public int rob(TreeNode root) {
        return robSub(root,new HashMap<TreeNode,Integer>());
	}
	
    private int robSub(TreeNode root,HashMap<TreeNode,Integer> map) {
    	if(root == null)
    		return 0;
    	if(map.containsKey(root))
    		return map.get(root);
    	
    	int val = 0;
    	if(root.left != null)
    		val += robSub(root.left.left,map) + robSub(root.left.right,map);
    	
    	if(root.right != null)
    		val += robSub(root.right.left,map) + robSub(root.right.right,map);
    	
    	val = Math.max(val + root.val,robSub(root.left,map) + robSub(root.right,map));
    	map.put(root,val);
    	return val;
	}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读