左叶子节点之和

发布时间 2023-08-10 23:19:10作者: 小凉拖

首先将非终止条件,非递归函数部分叫做单层递归。

思考过程如下:

  • 想解题思路:一个节点的左节点的左节点为空,左节点的右节点为空,那么这个结点就是左叶子结点,那么我们就要给它的数值加到sum上去
  • 解题思路即为单层递归,那么将单层递归写成程序为:
1     if ((node->left->left == nullptr) && (node->left->right == nullptr)) {
2         sum += node->left->data_;
3     }
  • 确定终止条件:二叉树的终止条件就是不能让当成循环中出现nullptr->left和nullptr->right,那么我们将将递归逻辑图画出:

 

首先f(N)肯定不行单层递归里以node->left->left为例,光是node->left就已经不行了,因此node==nullptr时我们就应该return;

f(0)肯定也不行node->left为nullptr,在求nullptr的左节点肯定不合理,因此node->left或则node->right为nullptr时我们就应该return;

因此整体代码为:

 1 //sum每次递归都要用,但是又不想重新初始化sum,那么就将它作为形参,并且把它变成引用
 2 void leftsum(Node* node,int &sum) {
 3     if (node == nullptr) return;
 4     if ((node->left == nullptr) && (node->right == nullptr)) return;
 5     if ((node->left->left == nullptr) && (node->left->right == nullptr)) {
 6         sum += node->left->data_;
 7     }
 8     leftsum(node->left, sum);
 9     leftsum(node->right, sum);
10 }