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

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

相关文章

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

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤