力扣222. 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h 个节点。
思路:
class Solution {
public:
int depth(TreeNode* root)
{
int ans=0;
while(root)
{
ans++;
root=root->left;
}
return ans;
}
int nodeNum(struct TreeNode* head) {
if(!head) return 0;
int leftH=depth(head->left);
int rightH=depth(head->right);
if(leftH==rightH)
return nodeNum(head->right)+(1<<leftH);
else
return nodeNum(head->left)+(1<<rightH);
}
};
力扣129. 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
输入: [1,2,3]
1
/ \
2 3
输出: 25
解释:
从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此,数字总和 = 12 + 13 = 25.
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sum=0;
int sumNumbers(TreeNode* root) {
// write code here
if(root==nullptr) return 0;
Sum(root,root->val);
return sum;
}
void Sum(TreeNode* root,int temp)
{
if(!root->left&&!root->right) sum+=temp;
if(root->left)
{
Sum(root->left,temp*10+root->left->val);
}
if(root->right