#include <iostream>
#include <queue>
using namespace std;
typedef struct treeNode_t
{
int deep;
struct treeNode_t *plchild;
struct treeNode_t *prchild;
treeNode_t(struct treeNode_t *pl, struct treeNode_t *pr)
{
plchild = pl;
prchild = pr;
deep = 0;
}
}treeNode;
int minDepth(treeNode *root)
{
if (root == nullptr)
{
return 0;
}
queue<treeNode *> q;
root->deep = 1;
q.push(root);
while (!q.empty())
{
treeNode *node = q.front();
q.pop();
//广度优先是按层遍历,某层出现一个叶子节点,则最小深度就产生了
if (node->plchild == nullptr && node->prchild == nullptr)
{
return node->deep;
}
if (node->plchild)
{
node->plchild->deep = node->deep + 1;
q.push(node->plchild);
}
if (node->prchild)
{
node->prchild->deep = node->deep + 1;
q.push(node->prchild);
}
}
return -1;
}
int main() {
treeNode *node11 = new treeNode(nullptr, nullptr);
treeNode *node10 = new treeNode(nullptr, nullptr);
treeNode *node9 = new treeNode(nullptr, nullptr);
treeNode *node8 = new treeNode(nullptr, nullptr);
treeNode *node7 = new treeNode(nullptr, node11);
treeNode *node6 = new treeNode(node9, node10);
treeNode *node5 = new treeNode(node8, nullptr);
treeNode *node4 = new treeNode(nullptr, nullptr);
treeNode *node3 = new treeNode(node6, node7);
treeNode *node2 = new treeNode(node4, node5);
treeNode *node1 = new treeNode(node2, node3);
cout << minDepth(node1) << endl;
return 0;
}