二叉树的最小深度(rust实现)

二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

思路

这道题本质上是考察:

  1. 如何遍历二叉树
  2. 理解什么是深度

对于这两点的考察,其实最底层的思路还是要对数据结构有灵活的应用;很明显,最小的二叉树深度就是广度遍历二叉树的时候,找到深度最小的叶子结点。我们只需要一层一层的遍历,只要找到叶子节点,返回它的深度就行了。

rust 复制代码
use std::cell::RefCell;
use std::ops::Not;
use std::rc::Rc;
use crate::solution::Solution;
use crate::tree_node::TreeNode;

impl Solution {
    //  给定一个二叉树,找到其最小深度
    pub fn min_depth(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
        if root.is_none() {
            return 0;
        }
        let mut queue = Vec::new();
        queue.push(root.unwrap());
        let mut result = 1;
        while !queue.is_empty() {
            let queue_len = queue.len();
            for _ in 0..queue_len {
                let node = queue.remove(0);
                if node.borrow().left.is_none() && node.borrow().right.is_none() {
                    return result;
                }
                if node.borrow().left.is_some(){
                    queue.push(node.borrow_mut().left.take().unwrap());
                }
                if node.borrow().right.is_some(){
                    queue.push(node.borrow_mut().right.take().unwrap());
                }
            }
            result += 1;
        }
        return result;
    }
}

该处使用了非递归的广度优先遍历。稍微使用了一个比较巧妙的方法,每次都把某层的节点推入到队列中,并且记录该层有多少个节点,然后根据记录的个数,取出该层的节点去判断。

相关推荐
2501_933923252 分钟前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
染指111021 分钟前
142.Agent-多Agent框架-通过Skills实现多Agent
开发语言·人工智能·python·langchain·agents
好好学习O(∩_∩)O39 分钟前
[QT] 多线程moveToThread 和易踩的8个坑
开发语言·qt
我是人✓1 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
敲代码的乔帮主1 小时前
Python 3 现代类型标注入门
开发语言·python
夜之眷属1 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
c++11:fuction包装器
开发语言·c++
kimnoic2 小时前
Python 爬虫的原理
开发语言·python
Fluxproxy2 小时前
Python爬虫异步提速终极方案|线程池ThreadPoolExecutor实战,告别单线程慢速爬取
开发语言·爬虫·python
思维新观察2 小时前
三星 Galaxy Tab S12 系列:大屏 AI 平板,兼顾轻薄与生产力
数据结构·人工智能·电脑