在C++中,将二叉树中的最大二叉搜索树(Largest BST in a Binary Tree)进行翻译

在c++中,将二叉树中的最大二叉搜索树(largest bst in a binary tree)进行翻译

在二叉树中,每个子节点只有两个节点(左和右)。树结构只是数据的表示。二叉搜索树(BST)是满足这些条件的特殊类型的二叉树 –

与其父节点相比,左子节点较小

右子节点的父节点比子节点大

假设给定一棵二叉树,我们有应该找出其中最大的二叉搜索树 (BST)。

立即学习“C++免费学习笔记(深入)”;

在此任务中,我们将创建一个函数来查找二叉树中最大的 BST。当二叉树本身是BST时,就可以确定整个二叉树的大小。举个例子 –

输入

  10  / 5  15 /  1  8  7

登录后复制

如图所示,在本例中突出显示的 BST 子树是最大的。 ‘3’ 是子树的大小,因此返回值是子树的大小。

输入

    52    /    37 67   / /  12 27 57 77          /         72 87

登录后复制

输出

5

登录后复制

节点长度小于其父节点长度的子树最多具有三个大小的 BST 节点。

查找给定二叉树中最大 BST 的方法

对于每个节点 x,如果以下点有效,则二叉树是 BST。只有数据小于其父节点数据的节点才会出现在节点的左子树中。只能有一个节点比其父节点拥有更多数据。左子树和右子树都应该用二叉搜索树(BST)来表征。

算法将是 –

我们将从二叉树并使用递归进行中序遍历。对于当前节点“ROOT”,我们将执行以下操作 –

如果它是有效 BST 的根,我们将返回其大小。

否则,我们将在左右子树中找到最大的 BST。

示例

#include using namespace std;struct Node {   int data;   struct Node *left;   struct Node *right;};struct Node *newNode (int data) {   struct Node *node = new Node;   node->data = data;   node->left = node->right = NULL;   return (node);}struct Detail {   int size;   int max;   int min;   int ans;   bool isBST;};bool isBST (Node * root, int min, int max) {   if (root == NULL) {      return true;   }   if (root->data data > max) {      return false;   }   return isBST (root->left, min, root->data - 1) &&   isBST (root->right, root->data + 1, max);}int size (Node * root) {   if (root == NULL) {      return 0;   }   return 1 + size (root->left) + size (root->right);}int largestBST (Node * root) {   // Current Subtree is BST.   if (isBST (root, INT_MIN, INT_MAX) == true) {      return size (root);   }   // Find largest BST in left and right subtrees.   return max (largestBST (root->left), largestBST (root->right));}int main () {   struct Node *root = newNode (67);   root->left = newNode (72);   root->right = newNode (77); root->left->left = newNode (57);   printf ("Size of the largest BST is %d", largestBST (root));   return 0;}

登录后复制

输出

Size of the largest BST is 2

登录后复制

结论

在这个问题中,我们了解了什么是二叉树和二叉搜索树,以及如何借助递归找出给定二叉树中最大的 BST。借助递归,我们将找出每个节点下的子树是否是 BST,并返回相应的值。

以上就是在C++中,将二叉树中的最大二叉搜索树(Largest BST in a Binary Tree)进行翻译的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2581925.html

(0)
上一篇 2025年3月6日 14:05:35
下一篇 2025年3月6日 14:05:40

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在C语言中的弧函数

    函数在C语言中是在graphics.h库中定义的。 在C编程语言中,有一个选项可以使用给定的半径、中心坐标和弧度来创建一个圆弧。 arc()函数在C的graphics.h库中定义 function 用于创建一个弧。这个弧函数包含在C语言的g…

    2025年3月6日
    000
  • 使用UDP进行文件传输的C程序

    数据可以在两台使用 C 语言实现 Socket 编程的计算机之间传输。 在同样的情况下,可以轻松地通过实现用户数据报协议 (UDP) 和简单的客户端/服务器。 安全性 – 通过加密处理。 协议 – UDP 加密 &#…

    2025年3月6日
    200
  • 将C程序转换为机器码的四个步骤是什么?

    创建和运行程序的过程 程序包含一组用编程语言编写的指令。 程序员的工作是编写和测试程序。 将’C’程序转换为机器语言的4个步骤是: 编写和编辑程序编译程序链接程序执行程序 编写和编辑程序 使用文本编辑器编写程序。 借…

    2025年3月6日
    200
  • 一个方阵可以表示为对称矩阵和反对称矩阵的和吗?

    对称矩阵 – 其转置等于矩阵本身的矩阵。然后它被称为对称矩阵。 反对称矩阵 – 其转置等于矩阵的负值,然后它被称为反对称矩阵。 对称矩阵和反对称矩阵的和是一个方阵。要找到这些矩阵的和,我们有以下公式。 设A为一个方阵…

    2025年3月6日
    200
  • C/C++中的优先队列介绍

    优先级队列是一种队列,其中根据分配给它们的优先级插入或删除元素,其中优先级是范围在 0-10 之间的整数值,其中 0 表示具有最高优先级的元素,10 表示具有最高优先级的元素优先级最低的元素。实现优先级队列遵循两条规则: 具有最高优先级的数…

    2025年3月6日
    200
  • 解释C语言中逻辑运算符和赋值运算符的概念

    首先,让我们学习一下逻辑运算符。 逻辑运算符 这些用于逻辑上组合两个(或更多)表达式。 它们是逻辑与(&&)、逻辑或(||)和逻辑非(!) 逻辑与(&&) 立即学习“C语言免费学习笔记(深入)”; exp1 …

    2025年3月6日
    200
  • 根据给定条件确定具有最多1的子序列的最小步骤

    本文的目的是实现一个程序,以找到最小步骤来根据给定条件确定最大 1 秒的子序列。 众所周知,包含以 null 结尾的字符的一维数组可以用来定义字符串。 给定一个长度为 K 的字符串 Str,其中 K 始终为偶数,并且包含字符“0”、“1”和…

    2025年3月6日
    200
  • 提交C++作业

    在本教程中,我们必须编写一个算法来找到一种在不被监考人员发现的情况下通过作业的方法。每个学生都必须向监考人员提交作业。学生 A 的作业是交给学生 B 的,因此学生 B 必须在监考人员注意到的情况下将作业返回/传递给学生 A。 所有学生都坐在…

    2025年3月6日
    200
  • 检查一个数组是否可以通过重新排列数组中的元素来适应另一个数组

    从问题描述中,我们可以理解到,给定两个数组,我们需要检查第一个数组是否能够适应第二个数组。 在现实世界中,有许多情况我们需要检查一个数组是否可以通过重新排列数组中的元素来适应另一个数组。 由于各种原因,程序员可能需要重新排列数组的项,以查看…

    2025年3月6日
    200
  • 检查字符串的字符是否可以通过替换’_’来变得非递减

    在本文中,我们将深入探讨字符串操作领域中一个有趣的问题:如何通过替换“?”字符来检查给定字符串的字符是否可以变为非递减顺序。这个问题为您提供了一个练习C++中字符串操作和条件检查技巧的绝佳机会。 Problem Statement Give…

    2025年3月6日
    200

发表回复

登录后才能评论