leetcode404 sum of Left Leaves

本文介绍了一种算法,用于计算二叉树中所有左子节点为叶子节点的值之和。通过递归遍历二叉树,判断每个节点是否为叶子节点,并累加符合条件的节点值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 求一个二叉树的所有左节点为叶子节点的和。
  2. 算法分析:
  3. (1)一个节点,当存在左子树的时候,进入计算,判断该节点是否为叶子节点。是的话,进行计算。当存在右子树的时候,判断该节点的右子树是否存在左子树,存在,则进行上述的计算。
  4. (2)对每个节点都要进行上述的操作。
  5. 为了累计计算结果,我们用引用来保存计算结果。
  6. 代码如下:

#include
using namespace std;
struct Node
{
int val;
Node *lChild;
Node *rChild;
Node(int val, Node *l = nullptr, Node *r = nullptr)
{
this->val = val;
this->lChild = l;
this->rChild = r;
}
Node()
{
this->lChild = nullptr;
this->rChild = nullptr;
}
};
Node *createTree(int intarr[], int length, int i)
{
Node *root = nullptr;
if (i < length && intarr[i] != -1)
{
root = new Node(intarr[i]);
root->lChild = createTree(intarr, length, i * 2 + 1);
root->rChild = createTree(intarr, length, i * 2 + 2);
}
return root;
}
bool isLeave(Node *node)
{
return node->lChild == nullptr && node->rChild == nullptr;
}
void getSumOfLeftLeaves(Node *node,int &sum)
{
if (isLeave(node))
{
sum=sum+node->val;
}
if (node->lChild)
{
getSumOfLeftLeaves(node->lChild,sum);
}
if (node->rChild)
{
if (node->rChild->lChild);
getSumOfLeftLeaves(node->rChild->lChild,sum);
}
}
int main()
{
int intarr[7] = {3,9,20,-1,-1,15,7};
Node *root = createTree(intarr, 7, 0);
int sum = 0;
getSumOfLeftLeaves(root, sum);
cout << sum << endl;
system(“pause”);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值