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.