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
广告