首先将非终止条件,非递归函数部分叫做单层递归。
思考过程如下:
- 想解题思路:一个节点的左节点的左节点为空,左节点的右节点为空,那么这个结点就是左叶子结点,那么我们就要给它的数值加到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 }
标签:node,right,sum,nullptr,叶子,节点,left From: https://www.cnblogs.com/Sandals-little/p/17621871.html