实现二叉树的基本操作

news2024/11/23 20:02:16

博主主页: 码农派大星.

关注博主带你了解更多数据结构知识

1我们先来模拟创建一个二叉树

public class TestBinaryTreee {
    static class TreeNode{
        public char val;
        public  TreeNode left;
        public  TreeNode right;
        public TreeNode(char val) {
            this.val = val;
        }
    }
    public TreeNode creatTree(){
        TreeNode A  = new TreeNode('A');
        TreeNode B  = new TreeNode('B');
        TreeNode C  = new TreeNode('C');
        TreeNode D  = new TreeNode('D');
        TreeNode E  = new TreeNode('E');
        TreeNode F  = new TreeNode('F');
        TreeNode G  = new TreeNode('G');
        TreeNode H  = new TreeNode('H');
        A.left = B;
        A.right = C;
        B.left = D;
        B.right = E;
        C.left = F;
        C.right = G;
        E.right = H;
        return A;
        //就是根节点
    }
}

2分别实现它的前中后序遍历

1前序遍历

// 前序遍历
    void preOrder(TreeNode root){
        if (root == null){
            return;
        }
        System.out.print(root.val+" ");
        //递归遍历左子树
        preOrder(root.left);
        //第归遍历右子树
        preOrder(root.right );
    }
 TestBinaryTreee testBinaryTreee = new TestBinaryTreee();
        testBinaryTreee.creatTree();
        TestBinaryTreee.TreeNode root = testBinaryTreee.creatTree();
        testBinaryTreee.preOrder(root);
        System.out.println();

2中序遍历

// 中序遍历
    void inOrder(TreeNode root){
        if (root == null){
            return;
        }
        inOrder(root.left);
        System.out.print(root.val+" ");
        inOrder(root.right);

    }
 testBinaryTreee.inOrder(root);
        System.out.println();

3后序遍历

// 后序遍历
    void postOrder(TreeNode root){
        if (root == null){
            return;
        }
        inOrder(root.left);
        inOrder(root.right);
        System.out.print(root.val+" ");

    }
testBinaryTreee.postOrder(root);
        System.out.println();

3 获取树中节点的个数

 //求有多少个节点
1:
    public int size(TreeNode root){
        if (root == null){
            return 0;
        }
        int ret = size(root.left)+
                size(root.right)+1;
        return ret;
    }
2:
    public static int nodeSize;
    public void size2(TreeNode root){
        if (root == null){
            return ;
        }
        nodeSize++;
        size2(root.left);
        size2(root.right);
    }
 System.out.println(testBinaryTreee.size(root));

 testBinaryTreee.size2(root);
        System.out.println(TestBinaryTreee.nodeSize);

4获取叶子节点的个数

//求叶子结点个数
1:
    public int getLeafNodeCount(TreeNode root){
        if (root == null){
            return 0;
        }
        if(root.left == null && root.right ==null){
            return 1;
        }
        return getLeafNodeCount(root.left)+
                getLeafNodeCount(root.right);
    }
2:
    public int leafSize;
    public void getLeafNodeCount2(TreeNode root){
        if (root == null){
            return ;
        }
        if(root.left == null && root.right ==null){
           leafSize++;
        }
        getLeafNodeCount2(root.left);
        getLeafNodeCount2(root.right);
    }
 System.out.println(testBinaryTreee.getLeafNodeCount(root));
        testBinaryTreee.getLeafNodeCount2(root);
        System.out.println(testBinaryTreee.leafSize);

5 获取第K层节点的个数

 //获取第k层节点个数
    public int getKLevelNodeCount(TreeNode root,int k){
        if(root == null){
            return 0;
        }
        if (k==1){
            return 1;
        }
        return getKLevelNodeCount(root.left,k-1)+
                getKLevelNodeCount(root.right,k-1);
    }
System.out.println(testBinaryTreee.getKLevelNodeCount(root, 3));

 

6获取二叉树的高度

 //获取二叉树高度
    public int getHeight(TreeNode root){
        if(root == null){
            return 0;
        }
        int leftHeight = getHeight(root.left);
        int rightHeight = getHeight(root.right);
        return leftHeight > rightHeight ?
                leftHeight+1 : rightHeight+1;

    }
int height = testBinaryTreee.getHeight(root);
        System.out.println(height);

7检测值为value的元素是否存在

 // 检测值为val的元素是否存在
    public TreeNode find(TreeNode root,char val){
        if(root == null){
            return null;
        }
        if (root.val == val ){
            return root;
        }
        TreeNode ret = find(root.left,val);
        if (ret != null){
            return ret;
        }
        ret = find(root.right,val);
            if (ret != null){
                return ret;
            }
        return null;
    }
TestBinaryTreee.TreeNode retN = testBinaryTreee.find(root, 'E');
        System.out.println(retN.val);

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

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

相关文章

Web入门——三栏布局页面

前置知识 内外边距 内边距(padding): padding是元素边框与其内容之间的空间。也就是说,如果你给一个元素设置了内边距,这个空间会作为元素内容与元素边框之间的缓冲区域。设置内边距会使元素本身变大。例如padding:10px就创建了10像素的空间…

每日OJ题_贪心算法四④_力扣397. 整数替换

目录 力扣397. 整数替换 解析代码 力扣397. 整数替换 397. 整数替换 难度 中等 给定一个正整数 n ,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n 。如果 n 是奇数,则可以用 n 1或n - 1替换 n 。 返回 n 变为 1 所需…

计算机网络复习-传输层

概念 传输层是进程与进程之间的通信使用端口(Port)来标记不同的网络进程端口(Port)使用16比特位表示(0~65535) UDP协议详解 UDP:用户数据报协议数据报:应用层传输过来的一个完整的数据不合并,不拆分 UDP的头部 UDP特点 UDP是无连接协…

picoCTF-Web Exploitation-Trickster

Description I found a web app that can help process images: PNG images only! 这应该是个上传漏洞了,十几年没用过了,不知道思路是不是一样的,以前的思路是通过上传漏洞想办法上传一个木马,拿到webshell,今天试试看…

【计算机网络】物理层 通信基础、奈氏准则、香农公式 习题2

下列说法中正确的是( )。 A. 信道与通信电路类似,一条可通信的电路往往包含一个信道 B.调制是指把模拟数据转换为数字信号的过程 C. 信息传输速率是指通信信道上每秒传输的码元数 D.在数值上,波特率等于比特率与每符号所含的比特数的比值 信息传输速率&a…

python随机显示四级词汇

python实现一个浮动窗口随机显示四级单词在桌面跑来跑去 实现一个浮动窗体随机显示四级单词在windows桌面置顶移动 tkinter库来创建窗口和显示单词,以及random库来随机选择单词。 使用after方法来定时更新窗口的位置,实现单词窗口的慢慢移动效果 使用…

【Apache Doris】周FAQ集锦:第 3 期

【Apache Doris】周FAQ集锦:第 3 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

SpringBoot+Vue实现图片滑块和文字点击验证码

一、背景 1.1 概述 传统字符型验证码展示-填写字符-比对答案的流程,目前已可被机器暴力破解,应用程序容易被自动化脚本和机器人攻击。 摒弃传统字符型验证码,采用行为验证码采用嵌入式集成方式,接入方便,安全&#…

速了解及使用布隆过滤器

布隆过滤器 介绍 概念:是一种高效查询的数据结构 作用:判断某个元素是否在一个集合中。(但是会出现误判的情况) 实现原理 加入元素: 当一个元素需要加入到布隆过滤器中时,会使用一组哈希函数对该元素进…

每周日发系统规划与管理师伴读脑图,今天是第4章

从第4章开始,系统规划与管理师的学习就正式步入了主题,考虑到我过去中断了2周,想必你的第4章教程已经看完了吧?

2024年天津市静海区教师招聘报名流程(建议电脑)

2024年天津市静海区教师招聘报名流程(建议电脑) #报名 #教师招聘 #教师招聘考试 #教招 #天津教师招聘 #天津教师招聘考试 #24年天津教师招聘 #24年天津市教师招聘考试 #天津市静海区教师招聘 #静海区教师招聘考试 #静海区教师编 #静海区#

【OceanBase诊断调优】—— 租户资源统计项及其查询方法

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。 适用版本 OceanBase 数据库 V4.1.x、V4.2.x 版本。 CPU 资源统计项 逻辑 CPU 使用率(线程处理请求的时间占比)。 通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看…

Ubuntu意外断电vmdk损坏--打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。

背景:电脑资源管理器崩溃卡死,强行断电重启,结果虚拟机打不开了,提示打不开磁盘“***.vmdk”或它所依赖的某个快照磁盘。 删除lck文件:失败vmware-vdiskmanager修复 :提示无法修复最终用 VMFS Recovery挂载…

【机器学习】集成学习在信用评分领域实例

集成学习在信用评分领域的应用与实践 一、引言二、集成学习的概念与原理三、集成学习在信用评分中的应用实例四、总结与展望 一、引言 在当今金融数字化快速发展的时代,信用评分成为银行、金融机构等评估个人或企业信用风险的重要工具。然而,单一的信用评…

OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现 目录 1.前言2.循环前缀3.硬件实现4.ModelSim仿真 1.前言 为了能够消除传输过程当中的符号间干扰,在IFFT处理完毕之后还要加上循环前缀。 2.循环前缀 实际通信信道中,由于接…

Linux常用软件安装(JDK、MySQL、Tomcat、Redis)

目录 一、上传与下载工具Filezilla1. filezilla官网 二、JDK安装1. 在opt中创建JDK目录2.上传JDK压缩文件到新建目录中3.卸载系统自代jdk4.安装JDK5.JDK环境变量配置6. 验证是否安装成功 三、安装MySQL1.创建mysql文件夹2.下载mysql安装压缩包3.上传到文件夹里面4. 卸载系统自带…

动态规划算法:⼦数组、⼦串系列(数组中连续的⼀段)

例题一 解法(动态规划): 算法思路: 1. 状态表⽰: 对于线性 dp ,我们可以⽤「经验 题⽬要求」来定义状态表⽰: i. 以某个位置为结尾,巴拉巴拉; ii. 以某个位置…

清除HP打印机内存的5种方法,总有一种适合你

序言 HP打印机通常具有2 MB到32 MB的内部内存容量。打印机使用此内存存储打印作业和信息,如文档中的页数、纸张类型、纸张大小和字体。但是,如果打印作业的大小超过打印机的内存大小,它将无法执行打印命令,并将拒绝打印文档。 此外,有时打印作业可能会卡在打印机的内存中…

Matlab/simulink永磁直驱风机的建模仿真

Matlab/simulink直驱永磁同步风机的建模仿真,跟随风速波动效果好,可以作为后期科研的基础模型

关于 IIS 开启匿名访问网站仍要账号密码登录网站的解决方法

欢迎关注公总号【云边小网安】 问题提出:发现虽然勾选了允许匿名访问网站,但在访问某一网站的时候仍然需要登录账号密码 解决方法一:登录管理员账号密码解决方法二:添加访问网站文件夹的用户 访问某一网站本质上来讲&#xff0…