在 C++ 中查找给定二叉树的左叶节点之和


假设我们有一个二叉树,它有一个根节点,以及它的左子节点和右子节点。任务是找到树中所有左叶节点的总和。

例如

输入-1

      

输出

15

解释:在给定的输入二叉树中,所有左叶节点的和是 9 + 4 + 2 = 15。所以,输出是 15。

解决这个问题的方法

我们有一个二叉树,任务是找到所有位于其父节点左侧的叶节点的和。

解决这个问题的递归方法是检查根节点的左节点是否为空。如果为空,则计算其左节点的和,并为右节点找到递归和。因此,对于每个节点,我们将递归地检查并找到其和。

  • 将具有根节点及其左子节点和右子节点的二叉树作为输入。
  • 一个整数函数 `leftLeafSum(treenode*root)` 将根节点作为输入,并返回所有位于其父节点左侧的叶节点的和。
  • 如果根节点为空或为 NULL,则返回“零”,否则检查根节点的左节点。
  • 如果根节点的左节点没有子节点,则递归地检查右节点。
  • 递归地返回左子节点和右子节点的和。

示例

在线演示

#include<bits/stdc++.h>
using namespace std;
struct treenode {
   int data;
   treenode * left;
   treenode * right;
};
struct treenode * createNode(int d) {
   struct treenode * root = new treenode;
   root -> data = d;
   root -> left = NULL;
   root -> right = NULL;
   return root;
}
int leftLeafSum(treenode * root) {
   if (root == NULL) {
      return 0;
   }
   if (root -> left and!root -> left -> left and!root -> left -> right) {
      return root -> left -> data + leftLeafSum(root -> right);
   }
   return leftLeafSum(root -> left) + leftLeafSum(root -> right);
}
int main() {
   struct treenode * root = NULL;
   root = createNode(4);
   root -> left = createNode(2);
   root -> right = createNode(2);
   root -> left -> right = createNode(7);
   root -> left -> left = createNode(5);
   root -> right -> left = createNode(5);
   root -> right -> right = createNode(7);
   int sum = leftLeafSum(root);
   cout << sum << endl;
   return 0;
}

运行以上代码将生成以下输出:

输出

10

解释:左侧的叶节点是 5 和 5,它们位于其父节点的左侧,因此所有叶节点的和 = 10。

更新于:2021年2月23日

950 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告