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

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

二叉树是一种数据结构。二叉树的每个节点包含 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月17日 21:34:39

相关推荐

  • 如何使用CSS使div标签的高度与浏览器窗口的高度相等?

    When working on web development projects, there are often scenarios where you need to give a div tag the full height of the browser window. This can b…

    2025年12月24日
    000
  • css怎么设置最大高度

    css设置最大高度的方法是,利用max-height属性来实现,如【max-height:50px;】,表示设置最大高度为50px。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 css中的max-height 属性可以设置元素的最大高度。 属性值: none …

    2025年12月24日
    000
  • css怎么设置div的高度

    css设置div的高度的方法:首先在div标签中添加style属性;然后在style属性中添加height属性并写明固定的高度即可,如【style=”height:300px;”】。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 我们可以…

    2025年12月24日 好文分享
    000
  • css怎么改行内元素高度

    css改行内元素高度的方法:可以利用line-heihgt属性来设置行内元素的高度,如【line-height:100px;】。line-height属性用来设置以百分比计的行高。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 line-height属性是css…

    2025年12月24日
    000
  • css高度自适应如何实现?css高度根据内容自适应的简单方法

    在进行网页开发时,可能会遇到这样的情况,网页中的内容会超出你原先设置的高度或者宽度,这时就需要实现高度自适应或者宽度自适应,下面这篇文章将给大家来介绍关于css高度自适应。 PS:css宽度自适应的介绍内容,可以看这篇文章:css自适应布局:css宽度自适应如何实现? 首先,我们刚开始设计某些网页板…

    2025年12月24日 好文分享
    000
  • 如何更改br标签的高度?

    标签是一种常用的 HTML 元素,用于在 Web 内容中添加换行符。然而,有时,行不连续性的预先存在的高度可能被认为是不够的,因此需要增大书面材料的连续行之间的间隙。在本次讨论中,我们将探索修改 标签高度的各种方法,包括使用 CSS line-height 属性和添加辅助换行元素。无论您是初级还是熟…

    2025年12月21日
    000
  • html如何设置高度

    在html中,可以使用height属性设置高度,只需要给元素设置“height:长度值”样式即可;其中长度值的单位可以为px、cm等,也可以设基于包含它的块级对象百分比高度的“%”。height属性不包括填充,边框,或页边距。 本教程操作环境:windows7系统、CSS3&&HTM…

    2025年12月21日 好文分享
    000
  • 如何解决html、body元的高度问题

    本篇文章给大家带来的内容是关于如何解决html、body元素的高度问题,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 首先:html元素和body元素均为块级元素。 简述:有时我们会发现未设置height: 100%,html、body元素的高度却为当前窗口的高度,看上去像是设置了…

    2025年12月21日
    000
  • 如何理解JavaScript中的迭代方法与递归方法?

    迭代效率高,递归代码简洁;迭代适合数组遍历、累加等线性任务,递归适合树遍历、分治等分层问题;可通过栈模拟递归实现迭代转换。 JavaScript中的迭代和递归,本质上都是循环执行代码块的方式,但实现思路和应用场景有所不同。迭代侧重于通过循环变量逐步改变状态,而递归则通过函数自身调用来解决问题,更像是…

    2025年12月20日
    100
  • JS中的树是什么?二叉树的基本概念

    二叉树是JavaScript中重要的分层数据结构,每个节点最多有两个子节点,广泛用于高效搜索、排序和数据组织;通过节点值比较实现插入与查找,常用遍历方式包括前序、中序和后序,其中中序遍历可得到有序数据;为避免树形退化为链表,需使用AVL或红黑树等平衡二叉树以维持O(log n)操作效率;删除节点时需…

    2025年12月20日
    000
  • 在C语言中,将二叉树的右视图打印出来

    任务是打印给定二叉树的右节点。首先用户将插入数据以创建二叉树,然后打印所形成的树的右视图。 上图展示了使用节点10、42、93、14、35、96、57和88创建的二叉树,其中选择并显示在树的右侧的节点。例如,10、93、57和88是二叉树的最右节点。 示例 Input : 10 42 93 14 3…

    2025年12月17日
    000
  • 二分搜索(递归和迭代)在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日
    100
  • 曝 iPhone Air 将重新设计,迭代计划推迟

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

    2025年11月27日 硬件教程
    000

发表回复

登录后才能评论
关注微信