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

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

   A

      B    C

D       E       F

                     G

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

  • 用char,左和右指针编写一个Node结构。

  • 用伪数据初始化二叉树。

  • 编写一个递归函数以查找二进制函数中最深的左侧节点。它需要三个参数根节点isLeftNode和结果指针来存储最深的节点。

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

  • 在左侧子树上调用递归函数。

  • 调用右侧子树上的递归函数。

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

  • 否则将数据打印到结果节点中。

示例

让我们看一下代码。

#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 << "最左边的孩子是 " << result->data << endl;

   }

   else {

      cout << "There is no left leaf in the given tree" << endl;

   }

   return 0;

}

输出结果

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

最左边的孩子是 D

结论

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

以上是 C ++中二叉树中最深的左叶节点 的全部内容, 来源链接: utcz.com/z/343182.html

回到顶部