二叉树的最小深度(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;
    }
}

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

相关推荐
AI科技星9 分钟前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
superman超哥11 分钟前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程
步达硬件12 分钟前
【Matlab】批量自定义图像处理
开发语言·matlab
军军君0114 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
liulilittle16 分钟前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
mjhcsp19 分钟前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机
huihuihuanhuan.xin20 分钟前
后端八股之java并发编程
java·开发语言
寻星探路24 分钟前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
余瑜鱼鱼鱼25 分钟前
Java数据结构:从入门到精通(十)
数据结构
崇山峻岭之间27 分钟前
Matlab学习记录32
开发语言·学习·matlab