求二叉树最小层数

int minDepth(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }

    constexpr int MAX_DEPTH    = INT16_MAX;
    constexpr int initLayerNum = 1;

    function<int(TreeNode*&, int)> check;
    check = [&](TreeNode*& node, int num)
    {
        if (node == nullptr) {
            return MAX_DEPTH;
        }

        if (node->left == nullptr && node->right == nullptr){
            return num;
        }
        else{
            return min(check(node->left, num + 1), check(node->right, num + 1));
        }
    };

    return check(root, initLayerNum);
}
时间: 2024-11-18 08:58:27

求二叉树最小层数的相关文章

求二叉树最大层数

都能求最小了,就能求最大: int maxDepth(TreeNode* root) { if (root == nullptr) { return 0; } constexpr int MIN_DEPTH = 0; constexpr int initLayerNum = 1; function<int(TreeNode*&, int)> check; check = [&](TreeNode*& node, int num) { if (node == nullpt

求二叉树的最小深度

思路:用递归的方法求解. 输入:二叉树的根节点: 输出:二叉树的最小深度. 最小深度的定义:从根节点到叶子节点的最短路径上的节点数. 算法如下: 将二叉树分为这么几种情况: 传入的根节点为空,返回NULL: 传入根节点不为空,左子树为空,右子树为空,返回最小深度1: 传入根节点不为空,左子树为空,右子树不为空,返回右子树的最小深度+1: 传入根节点不为空,左子树不为空,右子树为空,返回左子树的最小深度+1: 传入根节点不为空,左右子树都不为空,则返回左右子树中最小深度的较小值+1. 代码如下:

递归求取二叉树最小深度和最大深度

public class Binarytreedept { /*  * 输出二叉树最小深度     * 核心思想:根节点到达最近的叶子节点的路径长度.  * 1.当根为空时,输出0.  * 2.当左子树为空时,输出右子树深度+1.  * 3.当右子树为空时,输出左子树深度+1.  * 4.以上条件都不满足时,输出min(左子树深度,右子树深度)+1.  *   * 输出二叉树最大深度   * 核心思想:根节点到达最远的叶子节点的路径长度.  * 1.如果二叉树为空,则深度为0;  * 2.如果不

华为练习 求二叉树的宽度和深度

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

求二叉树的给定两个结点之间的距离

给定一颗二叉树,和两个给定的结点,求出这两个结点之间的距离 拿到题目时不要认为是求出二叉树的结点之间的最大距离,题目是求两个结点的之间的距离 题目有几种情况 两个结点分布在根节点的左子树或者右子树 一个结点分布在根节点的左子树,一个结点分布在根节点的右子树 这两个结点是兄弟结点 一个结点是另外结点的祖先结点 本题的解题思路是 利用层次遍历的方法,获取每个结点的高度,根节点左子树的高度用正数表示,根节点右子树的高度用负数表示 这样当两个结点分布在:一个结点分布在根节点的左子树,一个结点分布在根节点

二叉树(8)----求二叉树第K层的节点数和二叉树第K层的叶子节点数,递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树第K层的节点数 (1)递归方式 给定根节点pRoot: 如

求二叉树第K层的叶子节点的个数(假设根节点是第一层)

算法思想:采用队列结构按层次遍历,遍历K层时记录叶子的个数 int LeafKlevel(BiTree bt, int k){ //求二叉树bt的第k(k >1)层上叶子的节点个数 if(bt == NULL || k < 1) return 0; BiTree p=bt,Q[]; //Q是队列,元素是二叉树节点的指针 int front = 0,rear = 1,leaf = 0 //front 和 rear 是队头和队尾指针,leaf是叶子节点数 int last = 1,level =

leetcode104,111,543 求二叉树深度的dfs解法

104.求二叉树的最大深度 class Solution: def maxDepth(self, root: TreeNode) -> int: if root == None: return 0 else: leftdepth = self.maxDepth(root.left) rightdepth = self.maxDepth(root.right) return max(leftdepth, rightdepth) + 1 #!!!关键在于+1 111.求二叉树的最小深度 class

求二叉树深度

概念: 1.二叉树深度:树中结点的最大层次称为树的深度或高度. 2.二叉树层次:从根开始定义起,根为第一层,根的孩子为第二层,以此类推. 要点: 1.递归. 2.二叉树深度为左右子树深度较大值+1. 代码: /* 求二叉树深度 by Rowandjj 2014/7/13 ------------------------------- 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示