C++程式中二叉樹最深奇數層節點的深度


在本教程中,我們將學習如何在二叉樹中查詢最深的奇數層節點。

這類似於查詢二叉樹的深度。這裡,我們還有一個條件,即當前層是否是奇數。

讓我們看看解決問題的步驟。

  • 用虛擬資料初始化二叉樹。

  • 編寫一個遞迴函式來查詢二叉樹中最深的奇數層節點。

    • 如果當前節點是葉子節點並且層數為奇數,則返回當前層數。

    • 否則,返回左節點和右節點使用遞迴函式呼叫的最大值。

  • 列印最深的奇數層節點。

示例

讓我們看看程式碼。

 線上演示

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
struct Node* newNode(int data) {
   struct Node* node = (struct Node*) malloc(sizeof(struct Node));
   node->data = data;
   node->left = node->right = NULL;
   return node;
}
int oddLeafDepthInTree(struct Node *root, int level) {
   if (root == NULL) {
      return 0;
   }
   if (root->left == NULL && root->right == NULL && level % 2 == 1) {
      return level;
   }
   return max(oddLeafDepthInTree(root->left, level + 1), oddLeafDepthInTree(root->right, level + 1));
}
int main() {
   struct Node* root = newNode(1);
   root->left = newNode(2);
   root->right = newNode(3);
   root->left->left = newNode(4);
   root->right->left = newNode(5);
   root->right->right = newNode(6);
   root->right->left->right = newNode(7);
   root->right->right->right = newNode(8);
   int level = 1, depth = 0;
   cout << oddLeafDepthInTree(root, level) << endl;
   return 0;
}

輸出

如果執行上述程式碼,則會得到以下結果。

3

結論

如果您在本教程中有任何疑問,請在評論部分提出。

更新於:2021年1月27日

78 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告