LeetCode1_求二叉树最小深度(树)

博客围绕求解二叉树最小深度展开,介绍了两种思路,一是利用递归遍历,二是用队列进行层序遍历。还给出了二叉树层序遍历算法参考链接及C++队列类成员函数。总结指出二叉树操作主要用尾递归或循环遍历,涉及DFS和BFS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

 

 

思路1:利用递归遍历,求最小深度

 1 //递归遍历求最小深度
 2 class Solution {
 3 public:
 4     int run(TreeNode *root) {
 5         if(root ==NULL) 
 6             return 0;
 7         int l = run(root->left);
 8         int r = run(root->right);
 9         if(l==0 || r==0)
10             return l+r+1;
11         return min(l, r) + 1;
12     }
13 };

 

 

思路2:利用队列采用层序遍历,一旦找到一个叶节点,它肯定是最短的。

参考链接:

二叉树的层序遍历算法:https://blog.youkuaiyun.com/qq_29542611/article/details/79372678

 1 class Solution
 2 {
 3     public:
 4         typedef TreeNode* tree;
 5         int run(TreeNode *root)
 6         {
 7             // 层序遍历,一旦找到一个叶节点,它肯定是最短的
 8             if (root == NULL)return 0;
 9             queue<tree> qu;
10             tree now = root; // 记录该层的当前节点
11             tree last = root; // 记录该层的最后一个节点
12             int level = 1;
13             int size = 0;
14             qu.push(root);
15             while (!qu.empty())
16             {
17                 now = qu.front(); // 取队首
18                 qu.pop(); // 出队首
19                 size = qu.size();
20                 if (now->left != NULL)qu.push(now->left);
21                 if (now->right != NULL)qu.push(now->right);
22                 // 没有元素进队,说明这是一个叶子节点,找到的第一个叶子节点为最短的
23                 if (size - qu.size() == 0)break;
24                 // last==now,说明当前节点走到了该层的最后一个节点
25                 if (last == now)
26                 {
27                     level++;
28                     // last指向下一层的最后一个节点
29                     if (!qu.empty())last = qu.back();
30                 }
31             }
32             return level;
33         }

C++队列Queue类成员函数如下:

back()返回最后一个元素

empty()如果队列空则返回真

front()返回第一个元素

pop()删除第一个元素

push()在末尾加入一个元素

size()返回队列中元素的个数

 

 

总结:

二叉树操作主要还是利用尾递归或者循环遍历这两种思路,进而涉及DFS(主要利用递归或者栈实现)或者BFS(主要利用队列实现)。剩下的只需要按照这些思路即可。

广度优先BFS,深度优先DFS;

 

转载于:https://www.cnblogs.com/grooovvve/p/10825748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值