找到二叉树中符合搜索二叉树条件的最大拓扑结构

2024-06-21 22:32

本文主要是介绍找到二叉树中符合搜索二叉树条件的最大拓扑结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


import java.util.*;
//找到二叉树中符合搜索二叉树条件的最大拓扑结构public class MaxSearchTreeTuo{//二叉树节点的定义public static class Node{public int value;public Node left;public Node right;public Node(int data){this.value=data;}}//获得最大拓扑结构的大小public static int bstTopSize(Node head){if(head==null){return 0;}int max=MaxTopo(head,head);max=Math.max(bstTopSize(head.left),max);max=Math.max(bstTopSize(head.right),max);return max;}//获得节点的最大拓扑子结构public static int MaxTopo(Node h,Node n){if(h!=null&&n!=null&&isBSTNode(h,n,n.value)){return MaxTopo(h,n.left)+MaxTopo(h,n.right)+1;}return 0;}//判断是否为拓扑子结构的节点public static boolean isBSTNode(Node h,Node n,int value){if(h==null){return false;}if(h==n){return true;}return isBSTNode(h.value>value?h.left:h.right,n,value);}//方法二  采用拓扑贡献记录public static class Record {public int l;  //左子树贡献值public int r;   //右子树贡献值public Record(int left, int right) {this.l = left;this.r = right;}}public static int bstTopoSize2(Node head) {Map<Node, Record> map = new HashMap<Node, Record>();return posOrder(head, map);}public static int posOrder(Node h, Map<Node, Record> map) {if (h == null) {return 0;}int ls = posOrder(h.left, map);int rs = posOrder(h.right, map);modifyMap(h.left, h.value, map, true);modifyMap(h.right, h.value, map, false);Record lr = map.get(h.left);Record rr = map.get(h.right);int lbst = lr == null ? 0 : lr.l + lr.r + 1;int rbst = rr == null ? 0 : rr.l + rr.r + 1;map.put(h, new Record(lbst, rbst));return Math.max(lbst + rbst + 1, Math.max(ls, rs));}public static int modifyMap(Node n, int v, Map<Node, Record> m, boolean s) {if (n == null || (!m.containsKey(n))) {return 0;}Record r = m.get(n);if ((s && n.value > v) || ((!s) && n.value < v)) {m.remove(n);return r.l + r.r + 1;} else {int minus = modifyMap(s ? n.right : n.left, v, m, s);if (s) {r.r = r.r - minus;} else {r.l = r.l - minus;}m.put(n, r);return minus;}}public static void main(String []args){//System.out.println("Hello");Node node=new Node(12);node.left=new Node(10);node.right=new Node(13);node.left.left=new Node(4);node.left.right=new Node(14);node.right.left=new Node(20);node.right.right=new Node(16);node.left.left.left=new Node(2);node.left.left.right=new Node(5);node.left.right.left=new Node(11);node.left.right.right=new Node(15);System.out.println(bstTopSize(node));System.out.println(bstTopoSize2(node));}
}


这篇关于找到二叉树中符合搜索二叉树条件的最大拓扑结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082521

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho