这一题很简单,只有三个节点,判断就可以了
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool checkTree(struct TreeNode* root){
return root->left->val + root->right->val == root->val;
}
二叉树的最主要操作需要用到递归,这题求最大深度也是如此。
我差不多懂了递归的一个实现思想,按这题来说,maxDepth()
求的就是节点的最大深度;先假设这个函数可以实现,所以我们可以调用这个函数直接将root->left
和root->right
的最大深度求出来,然后再加根节点的一层, 不就是求的最大深度吗。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int max(int a, int b) {
return a > b ? a : b;
}
int maxDepth(struct TreeNode* root) {
if(root == NULL) return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));
}
此题和上题相同
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int calculateDepth(struct TreeNode* root) {
if(root == NULL) return 0;
int ldep = calculateDepth(root->left);
int rdep = calculateDepth(root->right);
int res = ldep > rdep ? ldep : rdep;
return res + 1;
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool evaluateTree(struct TreeNode* root) {
if(root->val == 0 || root->val == 1) return root->val;
if(root->val == 2) {
return evaluateTree(root->right) || evaluateTree(root->left);
}
return evaluateTree(root->right) && evaluateTree(root->left);
}