0

0

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

PHPz

PHPz

发布时间:2023-09-13 16:29:04

|

1006人浏览过

|

来源于tutorialspoint

转载

在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

输出

Axiom
Axiom

Axiom是一个浏览器扩展,用于自动化重复任务和web抓取。

下载
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 < min || root->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++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

404

2023.08.14

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

8

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

18

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

9

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

28

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号