1022.从根到叶的二进制之和
题目描述:
给出一棵二叉树,其上每个结点的值都是 0
或 1
。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1
,那么它表示二进制数 01101
,也就是 13
。
对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
以 10^9 + 7
为模,返回这些数字之和。
示例:
输入:[1,0,1,0,1,0,1]
输出:22
解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
题解:递归+移位
class Solution {
public:
int sumRootToLeaf(TreeNode* root) {
if(root==NULL) return 0;
if (root->left==NULL&&root->right==NULL){
return root->val%1000000007;
}
if(root->left){
root->left->val+=(root->val)<<1;
}
if (root->right)
{
root->right->val+=(root->val)<<1;
}
return (sumRootToLeaf(root->left)+sumRootToLeaf(root->right))%1000000007;
}
};
110:平衡二叉树
题目描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true
。
题解:多次使用递归~
#include<cmath>
class Solution {
public:
bool isBalanced(TreeNode* root) {
if(root==NULL) return true;
if(abs(height(root->left)-height(root->right))>1){
return false;
}
if(isBalanced(root->left)&&isBalanced(root->right)){
return true;
}
else{
return false;
}
}
int height(TreeNode* root){
if(root==NULL)return 0;
return 1+max(height(root->left),height(root->right));
}
int max(int a,int b){
return a>b?a:b;
}
};