迭代方法寻找二叉树的高度

迭代方法寻找二叉树的高度

二叉树是一种数据结构。二叉树的每个节点包含 0、1 或 2 个节点。因此,二叉树可以包含多个级别。

在这里,我们需要使用循环编写迭代代码来查找二叉树的高度。二叉树的总层数代表二叉树的高度。或者,我们可以说二叉树从根节点开始的最大深度就是二叉树的高度。

问题陈述 – 我们给出了一个二叉树。我们需要使用迭代的方法来求出给定二叉树的高度。

方法 1

正如我们上面所说,二叉树的高度等于二叉树的总层数。我们将使用队列数据结构来遍历每一层的每个节点并找到树的最大深度。

算法

第 1 步 – 定义“treeNode”类,并添加“val”整型变量。另外,在类中定义“左”和“右”指针。

步骤 2– 定义 createNode() 函数来为树创建一个新节点。它创建一个新的treeNode,用参数值初始化“val”,用空值初始化左指针和右指针。最后返回新创建的节点。

步骤 3 – findHeight() 函数用于查找二叉树的高度。

第 4 步 – 定义“levelqueue”队列来存储当前级别的所有节点、“treeHeight”、“n_cnt”变量和“temp”节点。

第 5 步− 如果头节点为 Null,则返回 0。

第 6 步– 将头节点推送到“levelQueue”。

第 7 步– 使用“while”循环进行迭代,直到“levelQueue”变空。

第 8 步– 将“treeHeight”增加 1,并用队列的大小初始化“n_cnt”,代表当前级别的总节点数。

第 9 步– 遍历队列的所有元素。

步骤 9.1 – 弹出队列的第一个元素。

步骤 9.2 − 如果当前节点存在左子节点,则将其插入队列。

步骤 9.3 − 如果当前节点存在右子节点,则将其插入队列。

步骤 9.4 – 从队列中删除第一个节点。

第 10 步– 返回“treeHeight”变量的值。

示例

#include #include using namespace std;class treeNode {public:    int val;    treeNode *left;    treeNode *right;};treeNode *createNode(int val) {    //Create a new node    treeNode *temp = new treeNode();    temp->val = val;    temp->left = NULL;    temp->right = NULL;    return temp;}int fidHeight(treeNode *head) {    queue levelQueue;    int treeHeight = 0; // To store the tree height of the current binary tree    int n_cnt = 0;      // To store the total number of current level nodes.    treeNode *temp;     // Pointer to store the address of a node in the current level.    // For empty binary tree    if (head == NULL) {        return 0;    }    // Add root node to queue    levelQueue.push(head);    // Traverse level of binary tree    while (!levelQueue.empty()) {        // For each level increment, the treeHeight of the three        treeHeight++;        n_cnt = levelQueue.size();        // Add child nodes of all nodes at the current level        while (n_cnt--) {            temp = levelQueue.front();            // Insert the left child node of the current node            if (temp->left != NULL) {                levelQueue.push(temp->left);            }            // Insert the right child node of the current node            if (temp->right != NULL) {                levelQueue.push(temp->right);            }            // remove the current node            levelQueue.pop();        }    }    return treeHeight;}int main() {    treeNode *head = NULL;    // Adding nodes to binary tree.    head = createNode(45);    head->right = createNode(32);    head->right->left = createNode(48);    head->left = createNode(90);    head->left->left = createNode(5);    head->left->left->left = createNode(50);    cout << "The given binary tree's treeHeight is " << fidHeight(head) << ".";    return 0;}

输出

The given binary tree's treeHeight is 4.

时间复杂度 – O(N) 遍历每个节点。

空间复杂度 – O(N) 在队列中存储节点。

解决任何问题时,迭代方法总是比递归方法更快。在这里,我们使用循环和队列来迭代地找到二叉树的最大深度或高度。然而,程序员可能会尝试编写递归方法的代码来查找二叉树的高度。

以上就是迭代方法寻找二叉树的高度的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:34:24
下一篇 2025年12月11日 03:50:45

相关推荐

  • 二分搜索(递归和迭代)在C程序中的实现

    二分搜索是一种用于在排序数组中查找元素(目标值)位置的搜索算法。在应用二分搜索之前,数组应该被排序。 二分搜索也被称为对数搜索、二分查找、半区间搜索。 工作原理 二分搜索算法通过将要搜索的元素与数组的中间元素进行比较,并根据此比较结果执行所需的过程。 情况1 – 元素 = 中间值,找到元…

    2025年12月17日
    000
  • 中序遍历是怎么遍历的

    中序遍历的遍历方法为:对于当前结点,首先遍历左子树,然后访问当前节点,最后遍历右子树。中序遍历是二叉树遍历的一种,也叫做中根遍历、中序周游。 本教程操作环境:windows7系统、C++17版本、Dell G3电脑。 二叉树是一种重要的数据结构,对二叉树的遍历也很重要。这里简单介绍三种二叉树中序遍历…

    2025年12月17日 好文分享
    000
  • c++ 图解层序遍历和逐层打印智能指针建造的二叉树

    二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不胜数。然而大多数文章都是讲解的前序/中序/后序遍历,有关逐层打印元素的文章并不多,已有文章的讲解也较为晦涩读起来不得要领。本文将用形象的图片加上清晰的代码帮助你理解层序遍历的实现,同时我们使用现代c++++提供的智能指针来简化树形数据结构…

    2025年12月17日 好文分享
    000
  • Golang指针在二叉树结构实现中的应用示例

    Go语言中通过指针实现二叉树节点连接,定义包含值和左右子节点指针的结构体,利用nil表示空子节点,使用取地址符构建树结构,递归遍历时传递指针避免复制,修改节点值需通过指针确保生效,指针引用特性是操作二叉树的基础。 在Go语言中,指针是构建动态数据结构的关键工具。二叉树作为一种典型的递归数据结构,天然…

    2025年12月16日
    000
  • 如何使用itertools模块进行高效的循环迭代?

    itertools模块通过惰性求值和C级优化提供高效迭代,其核心函数如count、cycle、chain、groupby、product等,可实现内存友好且高性能的循环操作,适用于处理大数据、组合排列及序列连接等场景。 说起Python里高效的循环迭代, itertools 模块绝对是绕不开的话题。…

    2025年12月14日
    000
  • 如何实现二叉树的遍历?

    答案是二叉树遍历分为前序、中序、后序和层序四种,分别采用递归或迭代实现,用于系统访问节点,处理空节点需加判断,广泛应用于表达式求值、序列化、LCA查找等场景。 二叉树的遍历,说白了,就是按照某种特定的规则,把树上的每一个节点都“走”一遍,访问一遍。最核心的无非是三种深度优先遍历(前序、中序、后序)和…

    2025年12月14日
    000
  • PHP 函数中递归如何用于二叉树的遍历或操作?

    递归在 php 二叉树操作中的运用包括:递归遍历:前序、中序和后序遍历二叉树。递归操作:在二叉树中查找、插入和删除元素。 PHP 函数中的递归:二叉树遍历和操作 简介递归是一种强大的编程技术,它允许函数调用自身。在二叉树操作中,递归特别有用,因为它自然契合二叉树的数据结构。本文将探讨如何使用 PHP…

    2025年12月9日
    000
  • PHP 函数中如何使用递归来实现二叉树?

    使用 php 递归实现二叉树涉及:创建一个二叉树节点类。使用递归实现插入、前序、中序和后序遍历函数。创建一个包含值的二叉树,并按上述遍历方式输出结果。 使用 PHP 递归实现二叉树 什么是二叉树? 二叉树是一种数据结构,其中每个节点最多有左右两个子节点。 立即学习“PHP免费学习笔记(深入)”; 什…

    2025年12月9日
    000
  • 曝 iPhone Air 将重新设计,迭代计划推迟

    最近,关于苹果下一代 iphone air 机型的消息不断涌现。 此前,知名博主 @数码闲聊站 曾爆料称:“经过苹果方面的评估,市场对超轻薄旗舰的接受度不高,国内某厂商原定于明年上半年推出的轻薄 Air 项目已被暂停。” 他还补充了一项数据:“iPhone Air 首周激活量仅 5W+,表现相当不理…

    2025年11月27日 硬件教程
    000
  • 华为迭代双折、三折工程机曝光:后置 5000 万像素三摄

    据博主 @数码闲聊站 最新爆料,某厂商迭代双折与三折工程机均采用 50mp 大底三摄方案,配备可变光圈主摄 + 高像素潜望长焦 + 多光谱摄像头,部分镜组采用 gp 方案,并有深度参与的自研硬件落地。 结合评论区讨论及产品迭代情况来看,该厂商预计为华为。 同时,该博主还在评论区回复了部分网友的问题。…

    2025年11月17日 硬件教程
    000
  • jQuery如何移除元素的height属性?

    jQuery如何移除元素的height属性? 在前端开发中,经常会遇到需要操作元素的高度属性的需求。有时候,我们可能需要动态改变元素的高度,而有时候又需要移除元素的高度属性。本文将介绍如何使用jQuery来移除元素的高度属性,并提供具体的代码示例。 在使用jQuery操作高度属性之前,我们首先需要了…

    2025年11月8日 web前端
    000

发表回复

登录后才能评论
关注微信