C++实现二叉树的最小深度


在这个问题中,我们给定一棵二叉树。我们的任务是找到二叉树的最小深度。

二叉树有一个特殊条件,即每个节点最多可以有两个子节点。

二叉树的最小深度是从根节点到任何叶子节点的最短路径。

让我们来看一个例子来理解这个问题:

输入

输出

2

解决方案

这个问题的解决方法是遍历二叉树并计算高度。这可以通过递归调用非叶子节点的子节点来完成,并为每个叶子节点返回1。

程序演示了我们解决方案的工作原理:

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node* left, *right;
};
int findMinDepthBT(Node *currentNode) {
   if (currentNode == NULL)
      return 0;
   if (currentNode->left == NULL && currentNode->right == NULL)
      return 1;
   if (!currentNode->left)
      return findMinDepthBT(currentNode->right) + 1;
   if (!currentNode->right)
      return findMinDepthBT(currentNode->left) + 1;
      return min(findMinDepthBT(currentNode->left),
   findMinDepthBT(currentNode->right)) + 1;
}
Node *newNode(int data) {
   Node *temp = new Node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return (temp);
}
int main() {
   Node *root = newNode(5);
   root->left = newNode(2);
   root->right = newNode(9);
   root->left->left = newNode(5);
   root->left->right = newNode(1);
   root->left->left->left = newNode(7);
   root->left->left->right = newNode(3);
   cout<<"The minimum depth of binary tree is "<<findMinDepthBT(root);
   return 0;
}

输出

The minimum depth of binary tree is 2

这种方法相当高效,但我们可以使用其他遍历技术更有效地找到最小深度。

一种这样的方法是使用层序遍历,我们逐层遍历树。我们将返回我们遇到的第一个叶子节点的层数。

程序演示了我们解决方案的工作原理:

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
struct lOrderQueue {
   Node *node;
   int depth;
};
int findMinDepthBT(Node *root) {
   if (root == NULL)
      return 0;
   queue<lOrderQueue> levelOrder;
   lOrderQueue deQueue = {root, 1};
   levelOrder.push(deQueue);
   while (levelOrder.empty() == false) {
      deQueue = levelOrder.front();
      levelOrder.pop();
      Node *node = deQueue.node;
      int depth = deQueue.depth;
      if (node->left == NULL && node->right == NULL)
         return depth;
      if (node->left != NULL) {
         deQueue.node = node->left;
         deQueue.depth = depth + 1;
         levelOrder.push(deQueue);
      }
      if (node->right != NULL) {
         deQueue.node = node->right;
         deQueue.depth = depth+1;
         levelOrder.push(deQueue);
      }
   }
   return 0;
}
Node* newNode(int data) {
   Node *temp = new Node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return temp;
}
int main() {
   Node *root = newNode(5);
   root->left = newNode(2);
   root->right = newNode(9);
   root->left->left = newNode(5);
   root->left->right = newNode(1);
   root->left->left->left = newNode(7);
   root->left->left->right = newNode(3);
   cout<<"The minimum depth of binary tree is "<<findMinDepthBT(root);
   return 0;
}

输出

The minimum depth of binary tree is 2

更新于:2021年3月12日

379 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告