C++ 中二叉树的最深左叶子节点


在本教程中,我们将找到二叉树中最深的左叶子节点。让我们看看二叉树。

   A
      B    C
D       E       F
                     G

让我们看看解决问题的步骤。

  • 编写一个具有字符、左指针和右指针的 Node 结构。

  • 用虚拟数据初始化二叉树。

  • 编写一个递归函数来查找二叉函数中最深的左节点。它接收三个参数:根节点、isLeftNode 和 result 指针,用于存储最深的节点。

  • 如果当前节点是左节点并且是叶子节点,则用当前节点更新结果节点。

  • 对左子树调用递归函数。

  • 对右子树调用递归函数。

  • 如果结果节点为空,则没有满足我们条件的节点。

  • 否则,打印结果节点中的数据。

示例

让我们看看代码。

 实时演示

#include <bits/stdc++.h>
using namespace std;
struct Node {
   char data;
   struct Node *left, *right;
};
Node *addNewNode(char data) {
   Node *newNode = new Node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   return newNode;
}
void getDeepestLeftLeafNode(Node *root, bool isLeftNode, Node **resultPointer) {
   if (root == NULL) {
      return;
   }
   if (isLeftNode && !root->left && !root->right) {
      *resultPointer = root;
      return;
   }
   getDeepestLeftLeafNode(root->left, true, resultPointer);
   getDeepestLeftLeafNode(root->right, false, resultPointer);
}
int main() {
   Node* root = addNewNode('A');
   root->left = addNewNode('B');
   root->right = addNewNode('C');
   root->left->left = addNewNode('D');
   root->right->left = addNewNode('E');
   root->right->right = addNewNode('F');
   root->right->left->right = addNewNode('G');
   Node *result = NULL;
   getDeepestLeftLeafNode(root, false, &result);
   if (result) {
      cout << "The deepest left child is " << result->data << endl;
   }
   else {
      cout << "There is no left leaf in the given tree" << endl;
   }
   return 0;
}

输出

如果执行上述程序,则会得到以下结果。

The deepest left child is D

结论

如果您在本教程中有任何疑问,请在评论部分中提出。

更新于: 2020-12-30

217 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.