一颗二叉树代码(图解)

2023-11-12

 什么是二叉树?

树结构是一种非线性存储结构,存储的是具有一对多关系的数据的集合

而树形结构的一种抽象出来的数据结构往往是二叉树的形式

 

满足以下两个条件的树就是二叉树:

本身是有序树

树中包含的各个节点的度不能超过 2即只能是 0或者1 或者 2

 


接下来要分享的二叉树的基本构成如图

 

static class TreeNode{

public String val;//值

public TreeNode left;//左

public TreeNode right;//右

public TreeNode (String val){//值构造方法
this.val=val;

}
}//创建一个二叉树
//public TreeNode root;//根
public TreeNode createTree(){

                                                                                                                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");

        



A.left=B; A.right=C;

B.left=D; B.right=E;

C.left=F; C.right=G;



return A;
//root=A;
        }//new一个树


   public   void preOrder (TreeNode root){
        if (root == null) return;
        System.out.print(root.val + " ");
        preOrder(root.left);
        preOrder(root.right);

    }//前序打印

   public   void inOrder (TreeNode root){
        if (root == null) return;

      inOrder(root.left);
        System.out.print(root.val + " ");
      inOrder(root.right);

    }//中序打印

   public   void postOrder (TreeNode root){
        if (root == null) return;
      postOrder(root.left);
      postOrder(root.right);
        System.out.print(root.val + " ");

    }//后序打印
    
   public void levelOrder(TreeNode root){
        if (root==null)return;

        Queue<TreeNode>queue=new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()){
            TreeNode tmp=queue.poll();
            System.out.print(tmp.val+" ");
            if (tmp.left!=null){
                queue.offer(tmp.left);
            }
            if (tmp.right!=null){
                queue.offer(tmp.right);
            }


        }

    }//层序打印

   public  int   nodeSize;//存放长度
   public void   size(TreeNode root){
      if (root == null) return ;
      nodeSize++;
      size(root.left);
      size(root.right);
    }//计算长度//遍历思路

   public int size2(TreeNode root){
      if(root==null)return 0;

    return size2(root.left)+size2(root.right)+1;
}//计算长度//子问题思路

    public  int   Count;//存放叶子
    public void getNodeCount(TreeNode root)   {
      if (root==null)return ;
        if (root.left==null&&root.right==null){
            Count++;
        }
     getNodeCount(root.left);
     getNodeCount(root.right);

    }//获取叶子节点个数//遍历思路

    public int getNodeCount1(TreeNode root){
        if(root==null)return 0;
if (root.left==null&&root.right==null) {
return 1;
}
return getNodeCount1(root.left)+getNodeCount1(root.right);

    }//获取叶子节点个数//子问题思路

    public int getLevelNodeCount(TreeNode root,int k) {
        if (root == null) {
            return 0;
        }

        if (k == 1) return 1;

    return getLevelNodeCount(root.left,k-1)
            +getLevelNodeCount(root.right,k-1);
    }//某一层数节点的个数

    public int getHeight(TreeNode root){
if (root==null)return 0;

        int Hei1=getHeight(root.left);
        int Hei2=getHeight(root.right);

return Hei1>Hei2?Hei1+1:Hei2+1;
    }//获取二叉树高度

    public TreeNode find(TreeNode root,String val){
        if (root==null)return null;
        if(root.val.equals(val))return root;

        TreeNode tmp= find(root.left,val);
        if (tmp!=null)return tmp;

return find(root.right,val);

    }//查找二叉树中的val值

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

一颗二叉树代码(图解) 的相关文章

随机推荐

  • PyEMD安装及简单使用

    0 安装 命令pip install PyEMD存在问题 不建议使用 若用此命令安装 会报以下错误 Looking in indexes http pypi doubanio com simple http mirrors aliyun c
  • IDEA社区版(Community)和付费版(UItimate)的区别

    比对类型 Ultimate 终极版 付费 Community 社区版 免费 语言支持 Java Java Groovy Groovy Kotlin Kotlin Scala 通过插件 Scala 通过插件 Python 和 Jython 通
  • 黑群晖vmm专业版_群晖的ABB应用不错,但必须吐槽群晖 VMM功能,让你看看就是不让你好好用!!!...

    吐槽君今天参加了Synology 2019 新品发布会 J V P XS等系列都有更新 还新增了UC系列 据说很牛X 但吐槽君家庭和企业都用不到UC 就自动过滤了 除了新品硬件发布 今天最大的干货更新在我看来有两个 ABB和VMM ABB
  • 一款做思维导图的神奇软件——MindMaster

    文章目录 1 思维导图的作用 2 如何下载MindMaster 3 如何使用MindMaster 3 1新建模板 3 2选择主题格式和页面格式 4 总结 1 思维导图的作用 从思维模式来开 思维导图是一种高效的模式 它主要是使用图文并茂的方
  • 软件开发的各步骤以及需要的工具

    1 需求调研 MindMap 工具使用FreeMind或MindManager 2 架构设计 UML ER 工具 PowerDesigner Togather RationalRose 3 数据库设计 PowerDesigner SQL20
  • Apple 允许您指定在您死后谁可以访问您的账户

    在周一的WWDC 2021活动中 Apple 宣布 从今年秋季的 iOS 15 和 macOS Monterey 操作系统更新开始 将可以指定在您死亡的情况下谁可以访问您的账户 新功能称为数字遗产 它使亲戚或朋友更容易访问已故亲人拥有的数码
  • ZYNQ7000系列 DDR读取正确性

    摘要 使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器 对功能进行硬件加速 加速器和ARM之间的交互信息一般包含自定义加速指令传递 待计算数据以及计算结果 这三种交互信息 使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设
  • java 档案整理 生成归档章 透明背景图片

    import javax imageio ImageIO import java awt import java awt image BufferedImage import java io File import java io IOEx
  • unity3d鼠标点击,获取世界坐标

    unity中有关于鼠标位置的函数 Input mousePosition 但不得不说 这个函数不到位 可以用一个print函数输出一下这个坐标会发现 只有X Y值在改变 Z值没有发生变化 并且在屏幕的左下角固定为 0 0 0 查看文档后发现
  • 类加载器是否为空

    package com bzu csh 项目名称 Test1 类名称 Test2 类描述 创建人 admin 创建时间 2017年1月7日 下午9 41 36 修改人 admin 修改时间 2017年1月7日 下午9 41 36 修改备注
  • 数据可视化之折线图绘制

    使用python中的matplotlib绘制折线图 环境需求 python 或者anaconda pycharm 和第三方库matplotlib 首次先绘制简单的折线图 其他的参数可以在使用熟练后一点一点的加入 import matplot
  • 计算机网络课程笔记

    学习MOOC华南理工计算机网络课程笔记 第1章 概述 1 1 为什么要学习计算机网络 1 2 互联网发展史 1 3 常用的基本概念 1 4 参考模型 1 5 参考模型相关概念 1 6 本课程的组织 第2章 物理层 2 1 物理层概述 2 2
  • JNI编程—JNI基础

    什么是JNI 怎么使用 JNI Java Native Interface 它是Java平台的一个特性 并不是Android系统特有的 其实主要是定义了一些JNI函数 让开发者可以通过调用这些函数实现Java代码调用C C 的代码 C C
  • python 如何编写一个自己的包

    python 如何编写一个自己的包 先写function 内容 package wadepypk ls init py f1 py f2 py f1 py def show print in pkg f show f2 py def sho
  • unix bsd linux gun   粗略解释

    最早的unix是开放的 很多组织对unix都有修改 期中比较有名的就是伯克利大学的修改版本 叫做bsd 是unix的分支 由于bsd的协议允许你直接使用 修改他的代码 并且可以作为商业用途 所以很多公司的unix都是从bsd衍生过来的 比如
  • mongodb学习笔记一:mongodb安装与介绍

    一 前言 最近开始学习非关系型数据库MongoDB 却在博客园上找不到比较系统的教程 很多资料都要去查阅英文网站 效率比较低下 本人不才 借着自学的机会把心得体会都记录下来 方便感兴趣的童鞋分享讨论 部分资源出自其他博客 旨将零散知识点集中
  • C/C++函数模板template

    1 说明 当函数处理功能相似 函数名相同 但是参数个数或者类型有区别 我们知道实现的方式是依靠函数重载 overload 但是如果仅函数参数或返回数的类型不同 我们想到靠函数模板解决这个问题 不仅节省内存 而且不用复杂声明多个函数 函数模板
  • 为线程池中的每个线程设置UncaughtExceptionHandler

    参考了 java并发编程实战 P134内容 每当线程池需要创建一个线程时 都是通过调用线程工厂方法来完成的 默认的线程工厂方法将创建一个新的 非守护的线程 并且不包好特殊的配置信息 如果你希望在线程运行之前 之后 或者运行中如果发生异常等情
  • Linux 系统 lscpu 命令详解

    文章目录 前言 lscpu 命令详解 命令 1 查看物理 CPU 个数 2 查看每个物理 CPU 核数 3 查看总线程数 4 查看内存信息 5 查看 linux 系统版本 前言 Linux 系统查看系统相关信息方法很多 以下详细介绍 lsc
  • 一颗二叉树代码(图解)

    什么是二叉树 树结构是一种非线性存储结构 存储的是具有一对多关系的数据的集合 而树形结构的一种抽象出来的数据结构往往是二叉树的形式 满足以下两个条件的树就是二叉树 本身是有序树 树中包含的各个节点的度不能超过 2即只能是 0或者1 或者 2