欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode-337 House Robber III

发布时间:2025/6/17 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 LeetCode-337 House Robber III 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.

Determine the maximum amount of money the thief can rob tonight without alerting the police.

 

题目大意

给定一棵二叉树,不能同时选择相邻结点的数值,求可能得到的结点值之和的最大值。

 

示例

E1

Input: [3,2,3,null,3,null,1]3/ \2 3\ \ 3 1 Output: 7 Explanation: Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

E2

Input: [3,4,5,1,3,null,1]3/ \4 5/ \ \ 1 3 1Output: 9 Explanation: Maximum amount of money the thief can rob = 4 + 5 = 9.

 

解题思路

递归遍历,计算当前结点以及其孙子结点的数值之和,和该结点的两个孩子结点之和进行比较,返回较大值。

 

复杂度分析

时间复杂度:O(N)

空间复杂度:O(N)

 

代码

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:int rob(TreeNode* root) {int l = 0, r = 0;return dfs(root, l, r);}int dfs(TreeNode* root, int& l, int& r) {if(root == NULL)return 0;int ll = 0, lr = 0, rl = 0, rr = 0;l = dfs(root->left, ll, lr);r = dfs(root->right, rl, rr);return max(root->val + ll + lr + rl + rr, l + r);} };

 

转载于:https://www.cnblogs.com/heyn1/p/11212240.html

总结

以上是生活随笔为你收集整理的LeetCode-337 House Robber III的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。