leetcode110. バランスツリーc++実装


問題の説明:
二叉木を与えて、高さバランスのとれた二叉木かどうかを判断します.
この問題では、高さバランスのツリーを次のように定義します.
1つのツリーの各ノードの左右の2つのサブツリーの高さ差の絶対値は1を超えない.
例1:
与えられた二叉木[3,9,20,null,null,15,7]
3/9 20/15 7はtrueを返します.
例2:
与えられた二叉木[1,2,2,3,3,null,null,4,4]
1/2 2/3 3/4はfalseを返します.
ソリューション:
/**
 * 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 depth(TreeNode* root) {
        if (root==NULL) return 0;
        int left = depth(root->left); //        
        int right = depth(root->right); //        
        return max(left, right) + 1; //     
    }

     bool isBalanced(TreeNode* root) {
        if (root == NULL) return true; //        
        if (abs(depth(root->left) - depth(root->right)) > 1) return false; //         1,       
        else return isBalanced(root->left) && isBalanced(root->right); //                 
    }
};

まとめ:再帰的な方法を用いて,作成するコード量は少ないが,綿密な理解と思考が必要である.効率が低く、メモリ消費量が大きい.