1. 程式人生 > 實用技巧 >LeetCode337打家劫舍III

LeetCode337打家劫舍III

題目連結

https://leetcode-cn.com/problems/house-robber-iii/

題解

  • 遞迴寫法
  • 這個思路似乎是錯的(不過我提交後是在某一個測試用例是超時了),先把這份程式碼放這兒吧,後邊補正確的解法
    • 題目要求兩個節點不能相連,這不等於隔層求和
// Problem: LeetCode 337
// URL: https://leetcode-cn.com/problems/house-robber-iii/
// Tags: Tree DFS Recursion
// Difficulty: Medium

#include <iostream>
#include <algorithm>
using namespace std;

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
};

class Solution{
public:
    int rob(TreeNode* root) {
        // 空節點,結果為0
        if(root==nullptr)
            return 0;
        // 搶當前節點及其隔層
        int result1 = root->val;
        if(root->left!=nullptr)
            result1 += rob(root->left->left) + rob(root->left->right);
        if(root->right!=nullptr)
            result1 += rob(root->right->left) + rob(root->right->right);
        // 搶根節點下一層的兩個節點及其隔層
        int result2 = rob(root->left) + rob(root->right);

        return max(result1, result2);
    }
};

作者:@臭鹹魚

轉載請註明出處:https://www.cnblogs.com/chouxianyu/

歡迎討論和交流!