java判断是否为序列二叉树 - Kaiqisan

2023-11-16

大家好,都吃晚饭了吗?我是Kaiqisan,是一个已经走出社恐的一般生徒,今天还是二叉树诶嘿嘿

首先还是明确一个概念 ---- 何为序列二叉树
答:中序遍历之后序列递增的二叉树为序列二叉树

比如这棵树

		   4
		/     \
	   2       7
 	  / \     / \ 
	 1   3	 5   8
	  		  \
	  		    6

它的中序遍历结果为 12345678 为单调递增,所以这棵树为序列二叉树

思路1

所以我们判断的核心思路就是使用当前遍历元素和上一个遍历元素进行比较,所以需要保留当前已经遍历的元素来留作下次判断的筹码

	// 临时参数,写在外层,以便在函数全局都可以使用
    static int temp = Integer.MIN_VALUE;

    static boolean isBST2(Tree head) {
        if (head == null) {
            return true;
        }
        boolean left = isBST2(head.left);
        
        if (!left) {
            return false;
        }
        if (head.val <= temp) {
            return false;
        }
        temp = head.val;
        boolean right = isBST2(head.right);
        if (!right) {
            return false;
        }
        return true;
    }

思路2

不使用递归,核心机制就是非递归的中序遍历,顺便保留上一次遍历的节点值(思路1的核心机制)

	static boolean isBST(Tree head) {
        if (head != null) {
        	// 临时参数,保留上一次遍历的结果
            int temp = Integer.MIN_VALUE;
            Stack<Tree> stack = new Stack<>();
            while (!stack.isEmpty() || head != null) {
                if (head != null) {
                    stack.push(head);
                    head = head.left;
                } else {
                    head = stack.pop();
                    if (temp >= head.val) {
                        return false;
                    }
                    temp = head.val;
                    head = head.right;
                }
            }
        }
        return true;
    }

总结

没有总结,活用二叉树的遍历就可以了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java判断是否为序列二叉树 - Kaiqisan 的相关文章

随机推荐

  • Linux_CentOS_/usr、/usr/share、/etc、目录下文件系统规则

    usr目录下的常用文件夹 usr share目录下的常用文件夹 etc目录下的常用文件夹 var log目录下的常用文件 usr local目录下常用文件夹
  • 1366 - Incorrect string value: ‘\xE8\xBE\xBD\xE5\xAE\x81...‘ for column ‘province_name‘ at row 1

    修改表的字符集编码 ALTER TABLE TABLE NAME CONVERT TO CHARACTER SET utf8mb4
  • 基于LinkedHashMap实现LRU Cache以及手写LRU

    public class LRUCache
  • FreeLibrary问题

    FreeLibrary问题 Delphi Windows SDK API http www delphi2007 net DelphiAPI html delphi 20061127162652164 html 释放动态库时报C盘下的系统文
  • QT学习之QMainWindow详解

    文章目录 1 菜单栏 2 工具栏 3 状态栏 4 铆接部件 5 核心部件 中心部件 6 资源文件 有关QT的学习我们会采取连载更新 传送门 有C 基础如何直接上手QT 最适合新手的第一个Qt小程序 今天更新内容为QMainWindow相关学
  • C++代理模式:Proxy Pattern

    代理模式 为另一个对象提供一个替身或者占位符以控制对这个对象的访问 这样做的好处是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 代理需要做的 控制和管理访问 需要时可以扩展目标对象的功能 被代理的对象可以是远程的对
  • 实时音视频的那些事儿(三)—— 音频编码

    前言 上一篇文章 实时音视频的那些事儿 二 音频采集 中我们讲到了如何在iOS Android Windows平台实现音频采集 今天将介绍如何实现音频的编码 一 iOS 中使用 AudioUnit 实现音频编码的过程 AudioUnit 是
  • java IO、NIO、AIO详解

    目录 概述 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 synchronous asynchronous 同步是一种
  • PE文件资源解析(四)光标资源的解析

    光标资源 在这里指的是资源类型为RT CURSOR的资源信息 通过ResHacker看到的效果图如下 解析代码如下 HRSRC hResrc FindResourceEx HMODULE hModule lpType lpName wLan
  • 将数组中的元素拼接为一个字符串

    join 方法 利用JS数组的join 方法即可完成将元素拼接为一个字符串 arrayObject join separator 备注 join 方法不给定分隔符的时候 默认以英文逗号作为分隔符 toString 方法 可以使用JS数组的t
  • 如何破解PDF文件密码(在线破解PDF密码)

    如何破解PDF文件密码 在线破解PDF密码 fcwgw 5d6d com 整理 凌空飞度社区 每当毕业临近的时候 毕业生都会忙着写论文 每逢此时 Adobe Reader就是最忙的了 但是有时候遇到一些加密的PDF文档 Adobe Read
  • Jenkins与git结合使用进行C++代码静态检查

    Jenkins与git结合使用进行C 代码静态检查 在软件开发过程中 静态代码检查是一种常见的工具和实践 可以帮助开发人员在编码阶段尽早发现和解决潜在的问题 本文将介绍如何使用Jenkins和git集成 利用cppcheck进行C 代码的静
  • 建站系列(一)--- 网站基本常识

    目录 相关系列文章 前言 一 因特网 二 网站 三 服务器 四 IP 五 域名 六 DNS 七 Hosts文件 八 端口号 九 URL 十 静态网站 十一 动态网站 相关系列文章 建站系列 一 网站基本常识 建站系列 二 域名 IP地址 U
  • Python 使用requests发送get请求

    get请求是常用的请求之一 相对于post请求简单些 对于传参数的get请求有的还是有难度的 和post请求一样 必须知道每个字段的含义 这样拿到的响应才是正确的 也是我们想要的 不带参数的get请求 import requests hea
  • 自学Android之路---笔记

    1 查看类的源码CTRL b 2 所有的活动即activity必须要在AndroidManifest xml中进行注册才能生效 3 布局多练习
  • 2023华为OD机试真题【缓存需要最少金币数/贪心算法】

    题目描述 静态扫描可以快速识别源代码的缺陷 静态扫描的结果以扫描报告作为输出 1 文件扫描的成本和文件大小相关 如果文件大小为N 则扫描成本为N个金币 2 扫描报告的缓存成本和文件大小无关 每缓存一个报告需要M个金币 3 扫描报告缓存后 后
  • JWT和token的区别

    什么是token token的意思是 令牌 是服务端生成的一串字符串 作为客户端进行请求的一个标识 当用户第一次登录后 服务器生成一个token并将此token返回给客户端 以后客户端只需带上这个token前来请求数据即可 无需再次带上用户
  • Mini-NDN 安装

    1 git clone https github com named data mini ndn 2 install sh 报错1 Traceback most recent call last File usr lib python3 d
  • Spring--IOC容器

    文章目录 Spring IOC容器 一 IOC概念和底层原理 1 官方概念 2 什么是IOC 3 IOC底层原理 4 降低耦合的历史演变 二 IOC接口 Beanfactory 1 IOC思想基于IOC容器完成 IOC容器底层就是对象工厂
  • java判断是否为序列二叉树 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天还是二叉树诶嘿嘿 首先还是明确一个概念 何为序列二叉树 答 中序遍历之后序列递增的二叉树为序列二叉树 比如这棵树 4 2 7 1 3 5 8 6 它的中序遍历结果