在本教程中,我们将找到二叉树中最深的左叶节点。让我们看看二叉树。
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
如果您对本教程有任何疑问,请在评论部分中提及。