树的左视图2025年2月6日 | 阅读3分钟 给定一个包含唯一元素的数组,构建一个二叉搜索树并打印树的左视图。树的左视图是指从树的左侧观察时可见的节点集合。 让我们举个例子来理解需要做什么。 如果树是 ![]() 如果我们从左边观察这棵树,我们可以看到节点 1、2、3、4 和 5。 所以左视图是 1、2、3、4、5。 如果树是 ![]() 如果我们从左边观察,我们可以看到 3、2、1,只有三个元素。 所以左视图是 3 2 1。 让我们来实现这段代码。 代码 输出 ![]() 说明 1. 类定义(class node) 定义了一个名为 node 的类,代表二叉树中的一个节点。 公共成员包括指向左右子节点的指针(node* left, node* right)和一个数据成员(long long int data)。 构造函数初始化数据并将左右指针都设置为 NULL。 2. insertnode 函数 接收一个二叉搜索树(BST)的根节点和一个元素(ele)作为输入。 将具有给定元素的这个新节点插入到 BST 中。 通过将元素与当前节点的数据进行比较来递归调用自身以遍历树。 插入后返回 BST 更新后的根节点。 3. main 函数 从用户那里读取测试用例的数量(t)。 对于每个测试用例 读取二叉搜索树中的元素数量(n)。 初始化一个指向 BST 根节点的指针(node* root)为 NULL。 逐个读取元素,并使用 insertnode 函数将它们插入到 BST 中。 4. 层序遍历 使用广度优先搜索(BFS)方法对 BST 进行层序遍历。 使用一个队列(queue<node*> q)来跟踪每一层的节点。 对于每一层 从队列中弹出节点,打印每一层的第一个节点的(数据)。 将每个节点的左右子节点(如果存在)入队。 5. 输出 对于每个测试用例,根据层序遍历打印 BST 每一层第一个节点的(数据)。 让我们讨论一下代码的时间和空间复杂度 时间复杂度 insertnode 函数 向二叉搜索树中插入一个节点的平均时间复杂度为 O(log N),其中 N 是树中的节点数。 然而,在最坏的情况下(倾斜树),时间复杂度可能为 O(N),其中 N 是树中的节点数。 层序遍历(BFS) 层序遍历涉及访问每个节点一次。 在最坏的情况下,所有节点都会被访问,导致时间复杂度为 O(N),其中 N 是树中的节点数。 总体时间复杂度 在最坏的情况下,整体时间复杂度由层序遍历主导:O(N)。 空间复杂度 insertnode 函数 insertnode 函数的空间复杂度平均为 O(log N),这是由于递归调用栈。在最坏的情况下(倾斜树),空间复杂度可能为 O(N)。 层序遍历(BFS) BFS 遍历的空间复杂度为 O(W),其中 W 是二叉树的最大宽度(同一层的节点数)。 在最坏的情况下(完全不平衡的树),宽度 W 可能为 N,导致 O(N) 的空间复杂度。 总体空间复杂度 总体空间复杂度在最坏情况下由 BFS 遍历所需空间主导:O(N)。 总结 时间复杂度:O(N) 空间复杂度: O(N) 请注意,这些复杂度是基于最坏情况的。 下一主题Maximum-xor |
我们已经讨论了散列是一种著名的搜索方法。当新键的哈希值与哈希表中已占用的存储桶匹配时,会发生冲突。开放寻址用于冲突处理。与分离链表类似,开放寻址是一种处理冲突的技术。在开放寻址中,...
阅读 6 分钟
问题陈述:给定一个按字典顺序排序的字符串数组。您的任务是确定此数组中使用的字符顺序。例如,数组 = ["baa", "abcd", "abca", "cab", "cad"] 在上面的示例中,字符的顺序将是 b、d、a、c。所以,我们有...
7 分钟阅读
冒泡排序 冒泡排序是一种简单基本的系统,用于按特定顺序(通常是升序或降序)对列表或数组的元素进行排序。冒泡排序会重复遍历列表,比较相邻的项,如果顺序不正确则交换它们……
阅读 4 分钟
引言:数据结构是计算机科学和软件开发的重要组成部分,它们提供了组织、存储和操作数据的有效方法。这些结构是设计算法和数据存储系统的构建块。从简单的数组到复杂树结构和图,数据结构起着...
5 分钟阅读
在本教程中,我们将讨论梳排序、希尔排序以及它们之间的区别。梳排序是冒泡排序的一个更复杂的版本。冒泡排序会评估所有相邻值,而梳排序会消除列表末尾附近的任何“海龟值”或小值。它...
阅读 10 分钟
引言:矩阵操作和置换领域在从计算机科学到计算生物学等各种领域都起着重要作用。在数据结构中发现矩阵中修改过的行是一项有趣的尝试,它揭示了嵌入在数据结构中的复杂模式和关系。在此...
7 分钟阅读
栈是计算机科学和算法中广泛使用的基本数据结构。它遵循后进先出 (LIFO) 原则,允许进行 push 和 pop 操作,但不能直接访问中间的元素。单调栈是标准栈的一个变体,具有一个附加的不变量——...
阅读9分钟
使用相同数字集合的更高回文数 回文数因其一致性和优雅而著称。在尝试使用一组相似的数字找到更高的回文数时,它们构成了一个独特的挑战。这场探索计算世界的旅程...
5 分钟阅读
引言:树遍历算法是理解和重建二叉树的基础。给定二叉树的中序和前序遍历,可以重建原始树。此过程涉及利用这些遍历的属性来准确地重建树结构。理解中序和...
阅读 8 分钟
实用拜占庭容错 (pBFT) 是一种共识算法。它由 Barbara Liskov 和 Miguel Castro 在 90 年代推出。它旨在高效地执行工作操作。它经过优化,能在短时间内运行。其主要目标是解决...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India