53 # 反转二叉树

news2024/11/24 13:44:46

由于我学习的视频这一节跟上一节重复。没找到该节的学习资源,我自己参考网上实现的,有问题还请指出。
在这里插入图片描述
如图,下面实现反转

// 节点
class Node {
    constructor(element, parent) {
        this.element = element; // 存的数据
        this.parent = parent; // 父节点
        this.left = null; // 左子树
        this.right = null; // 右子树
    }
}

class BST {
    constructor(compare) {
        this.root = null;
        this.size = 0; // 节点个数
        this.compare = compare || this.compare;
    }
    compare(e1, e2) {
        return e1 - e2;
    }
    // 添加节点
    add(element) {
        // 如果根元素不存在
        if (this.root === null) {
            this.root = new Node(element, null);
            this.size++;
            return;
        } else {
            // 如果根元素存在,那么增加的就不是根节点,需要找到 parent
            let currentNode = this.root;
            // 当前比较的结果
            let compare = 0;
            // 先找到需要对比的 parent(当前父节点)
            let parent = null;
            while (currentNode) {
                parent = currentNode;
                compare = this.compare(element, currentNode.element);
                // 如果大于 0 找右树,小于 0 找左树
                if (compare > 0) {
                    currentNode = currentNode.right;
                } else if (compare < 0) {
                    currentNode = currentNode.left;
                } else {
                    // 如果比较后结果一样,由自己决定是否需要覆盖
                    currentNode.element = element; // 覆盖
                    return;
                }
            }
            // 找到了 parent,生成新节点
            let newNode = new Node(element, parent);
            if (compare > 0) {
                parent.right = newNode;
            } else {
                parent.left = newNode;
            }
        }
    }
    // 先序遍历
    perorderTraversal(visitor) {
        if (visitor == null) return;
        const traversal = (node) => {
            if (node === null) return;
            visitor.visit(node);
            traversal(node.left);
            traversal(node.right);
        };
        traversal(this.root);
    }
    // 中序遍历
    inorderTraversal(visitor) {
        if (visitor == null) return;
        const traversal = (node) => {
            if (node === null) return;
            traversal(node.left);
            visitor.visit(node);
            traversal(node.right);
        };
        traversal(this.root);
    }
    // 后序遍历
    postorderTraversal(visitor) {
        if (visitor == null) return;
        const traversal = (node) => {
            if (node === null) return;
            traversal(node.left);
            traversal(node.right);
            visitor.visit(node);
        };
        traversal(this.root);
    }
    // 反转二叉树
    invert(node) {
        if (node !== null) {
            let temp = node.left;
            node.left = node.right;
            node.right = temp;
            this.invert(node.left);
            this.invert(node.right);
        }
        return node;
    }
}

let bst = new BST();

let arr = [10, 8, 19, 6, 15, 22, 20];

arr.forEach((element) => {
    bst.add(element);
});
console.dir(bst.invert(bst.root), { depth: 100 });

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion - ReV Animated v1.2.2 的 2.5D 模型与提示词

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131655644 ReV Animated v1.2.2 模型能够创建类似 2.5D 的图像生成。该模型是 checkpoint 合并&#xff0c;是其他模型的产物&#xff0c;以创建源…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html&#xff0c;然后前台会解析成php 没测试最新版 比如编辑专题&#xff1a;/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文&#xff1a; 微擎后…

Unity经营类美食小摊小游戏

Unity经营类美食小摊小游戏 挺有意思的小游戏 关卡页面 游戏主页面 有顾客上门 需要给顾客搭配他们想要的美食 会不断地有顾客过来&#xff0c;这个时候就考验手速的时候了&#xff0c;真实模拟经营 服务到位立马有钱 项目地址&#xff1a; https://download.csdn.net/downl…

PHY芯片的使用(三)在U-boot下网络PHY的移植

1、概述 以太网 PHY 驱动移植&#xff0c;主要包括 Linux、 u-boot 及设备树等三个方面标准框架下的移植。本文以裕太8511PHY为例展开说明。一般国产芯片厂商会提供在uboot/linux下PHY的驱动。在uboot/linux的PHY框架是有区别的&#xff0c;这点要注意。 YT8511 PHY 驱动的移…

数学建模学习之发动机最优生产计划模型求解

问题重述 某工厂向用户提供发动机&#xff0c;按合同规定&#xff0c;其交货数量和日期是:第一季末交 40 台第二季末交 60 台&#xff0c;第三季末交 80 台。工厂的最大生产能力为每季 100 台&#xff0c;每季的生产费用是(元)&#xff0c;此处 为该季生产发动机的台数。若工…

(33)接收信号强度指示(RSSI)

文章目录 前言 33.1 在你的自动驾驶仪上设置RSSI 33.2 在MissionPlanner的HUD中显示RC接收器的RSSI值 33.3 连接实例 33.4 特殊用例 前言 本文介绍了如何获取自动驾驶仪的接收信号强度指示&#xff08;RSSI&#xff09;。 33.1 在你的自动驾驶仪上设置RSSI RSSI 可通过一…

录音转文字怎么操作?这几个好用的录音转文字的方法分享给你

小伙伴们&#xff0c;你们有没有遇到过这样的情况&#xff1a;想要记录一段重要的会议、讲座或者采访的内容&#xff0c;但是在网页上进行音频转文字的效果不好&#xff1f;别担心&#xff0c;随着科技的不断发展&#xff0c;音频转文字的软件可以很好的解决这些问题。这些神奇…

猿人学第二届第一题找修改位置(非答题)

第二届第一题 AES(魔改) Base64(魔改) MD5 第一题不难&#xff0c;想要得到结果直接扣代码就行&#xff0c;但是我想找找到底修改了哪个位置。 MD5( AES (now page) ) AES加密ECB-pksc7 的 key 标准是128位即 16*8(bit) &#xff0c;这里666yuanrenxue66 是15位不是标准k…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的实践应用

查看原文>>>基于”Python”多技术融合在蒸散发与植被总初级生产力估算中的实践应用 熟悉蒸散发ET及其组分&#xff08;植被蒸腾Ec、土壤蒸发Es、冠层截留Ei&#xff09;、植被总初级生产力GPP的概念和碳水耦合的基本原理&#xff1b;掌握利用Python与ArcGIS工具进行相…

java的默认字节序是big-endian

big-endian就是重要字节先出现&#xff0c;保存在低内存地址&#xff0c;而little-endian正好相反。 在Java中&#xff0c;默认是采用big-endian的。 Java官网虚拟机介绍章节&#xff0c;也明确进行了说明&#xff1a; https://docs.oracle.com/javase/specs/jvms/se20/html/jv…

10.2.7 【Linux】与文件系统及程序的限制关系:ulimit

单一 filesystem 能够支持的单一文件大小与 block 的大小有关。但是文件系统的限制容量都允许的太大了&#xff01;如果想要让使用者创建的文件不要太大时&#xff0c; 我们是可以考虑用 ulimit 来限制使用者可以创建的文件大小。 10.2.8 变量内容的删除、取代与替换 &#xf…

【SAP UI5 控件学习】DAY04 Input组Part IV 完结List组Part I

1.时间选择器Time Picker 和Data Picker类似&#xff0c;Time Picker允许用户选择相应的时间。 它有以下一些比较常用的属性。 value用于显示Input中的时间的值&#xff0c;这个属性只能接受字符串的值&#xff0c;如果是UI5.getInstance()获取到的时间&#xff0c;需要转化成…

零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】

学前感言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决. 基…

LayUI 实现二级导航栏

目录 实现步骤&#xff1a; 1. 分析数据库 2. 构建数据源 2.1 编写实体类 2.2 编写节点实体类 2.3 构建BuildTree节点结构方法类 2.4 编写dao类 2.5 编写数据Acntion控制类 3. 前台准备 3.1 配置mvc.xml文件 3.2 页面编写 3.3 运行效果 实现步骤&#xff1a; 1. 分…

鼠标右击没有新建WORD、EXCEL、PPT选项卡解决方案

一、WinR打开运行窗口&#xff0c;输入regedit打开注册表 二、进入到相应位置&#xff0c;复制粘贴到路径处即可 ①word word&#xff1a;计算机\HKEY_CLASSES_ROOT\.docx 计算机\HKEY_CLASSES_ROOT\.doc 看你改哪个都行&#xff0c;我觉得修改第一个docx那个就行&#xff0c…

请求响应-路径参数的接收

目录 路径参数 单个路径参数地获取 多个路径参数地获取 路径参数 路径参数&#xff1a;通过URL直接传递参数&#xff0c;即参数是请求路径的一部分&#xff0c;Controller类中使用{参数名}来标识该路径参数&#xff0c;需要使用PathVarible获取路径参数 单个路径参数地获取…

密码学入门——HMAC

文章目录 一、什么是HMAC二、HMAC的步骤 一、什么是HMAC HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104)&#xff0c;其中 HMAC的H就是Hash的意思。 HMAC 中所使用的单向散列函数并不仅限于一种&#xff0c;任何高强度的单向散列函数都可以被用于HMAC&#xff0…

基于深度学习的高精度深海鱼检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度深海鱼检测识别系统可用于检测与定位深海鱼目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的深海鱼目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集&a…

NTP 时间戳和RTP时间戳的差异

1&#xff0c;RTP RTP全称是Real-time Transport Protocol&#xff08;实时传输协议&#xff09;&#xff0c;它是IETF提出的一个标准&#xff0c;对应的RFC文档为RFC3550。一般用其承载实时性要求很高的数据形成RTP包&#xff0c;在语音通信中&#xff0c;把PCM数据编码后得到…

微服务是SOA,微服务也不是SOA

文章目录 一、什么是SOA&#xff1f; 什么是微服务&#xff1f;SOA 和微服务的区别 公众号&#xff1a; MCNU云原生&#xff0c;文章首发地&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&#xff0c;第一时间掌握&#xff01; 本文源自一次面试官的提问&#xff1a;你觉得…