首页 > 其他分享 >day13

day13

时间:2023-01-29 00:33:12浏览次数:41  
标签:遍历 res List 二叉树 day13 root 节点

1、二叉树理论基础篇

  1. 二叉树的种类

    1. 满二叉树:二叉树的所有叶子节点都在最后一层,并且节点总数为2^n-1,n为层数【从1 开始】
    2. 完全二叉树:二叉树的所有叶子节点都在最后一层或者倒数第二层,且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,则该二叉树为完全二叉树。
    3. 二叉搜索树(二叉排序树)【有序树】
      1. 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或者右子节点
    4. 平衡二叉树(平衡二叉搜索树)
      1. 它是一颗空树或他的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
  2. 二叉树的存储方式

    1. 链式存储【使用指针】

      img

    2. 顺序存储【使用数组】

      1. 顺序存储二叉树通常只考虑完全二叉树
      2. 第n个元素的左子节点下标为:2*n+1
      3. 第n个元素的右子节点下标为:2*n+2
      4. 第n个元素的父节点下标为:(n-1)/ 2
      5. 注意:n表示二叉树的第几个元素(从0开始编号)
  3. 二叉树的的遍历方式

    1. 深度优先遍历:先往深走,遇到叶子节点再往回走。
      1. 前序遍历(递归法,迭代法)
      2. 中序遍历(递归法,迭代法)
      3. 后序遍历(递归法,迭代法)
    2. 广度优先遍历:一层一层的去遍历。
      1. 层次遍历(迭代法)
    1. 堆是具有以下性质的完全二叉树:

      • 每个节点的值都大于或等于其左右子节点的值,称为大顶堆。

        • 注意:没有要求节点的左子节点的值与右子节点的值的关系
      • 每个节点的值都小于或等于其左右子节点的值,称为小顶堆。

    2. 大顶堆特点

      • arr[i] > = arr[2i + 1] && arr[i] > = arr[2i + 2]
    3. 小顶堆特点

      • arr[i] <= arr[2i + 1] && arr[i] < = arr[2i + 2]
    4. 对数组进行升序排序:采用大顶堆;对数组进行降序排序:采用小顶堆

2、递归遍历

//前序遍历
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> res =  new ArrayList<Integer>();
        preOrder(root, res);
        return res;  
    }

    public void preOrder(TreeNode root,List<Integer> res){
        if(root == null){
            return;
        }
        res.add(root.val);
        preOrder(root.left, res);
        preOrder(root.right, res);
    }
}


//中序遍历
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res =  new ArrayList<Integer>();
        inOrder(root,res);
        return res;
    }

    public void inOrder(TreeNode root, List<Integer> res){
        if(root == null){
            return;
        }
        inOrder(root.left, res);
        res.add(root.val);
        inOrder(root.right, res);
    }
}


//后序遍历
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res =  new ArrayList<Integer>();
        postOrder(root,res);
        return res;
    }

    public void postOrder(TreeNode root, List<Integer> res){
        if(root == null){
            return;
        }
        postOrder(root.left, res);
        postOrder(root.right, res);
        res.add(root.val);
    }
}

标签:遍历,res,List,二叉树,day13,root,节点
From: https://www.cnblogs.com/hzj-bolg/p/17069455.html

相关文章

  • C++Day13 tinyxml2解析rss文件
    一、任务与思路使用tinyxml解析rss文件,使用std::regex(正则表达式)去除html标签,并生成一个pagelib.txt,格式如下<doc><docid>1</docid><title>...</title><......
  • Day13 - 多任务编程【线程】
    1.线程介绍线程也是实现多任务的一种方式一个程序在执行时会对应一个主进程,主进程中会有一个主线程通过主线程手动产生的线程称为子线程进程是最小资源分配单位线程......
  • day13-接口和内部类
    1.接口1.1信息管理系统集合改进(应用)使用数组容器的弊端容器长度是固定的,不能根据添加功能自动增长没有提供用于赠删改查的方法优化步骤创建新的StudentDa......
  • day13-功能实现12
    家居网购项目实现012以下皆为部分代码,详见https://github.com/liyuelian/furniture_mall.git29.功能27-Ajax检验注册名29.1需求分析/图解用户注册时,后端通过验证,提......
  • day13
    ##循环结构![image-20221229174904825](C:\Users\biao\AppData\Roaming\Typora\typora-user-images\image-20221229174904825.png)![image-20221229175121292](C:\Users......
  • 苏嵌实训——day13
    文章目录​​零、概述​​​​一、文件IO​​​​1.1学习IO的前提​​​​1.2IO是什么​​​​1.3如何使用IO​​​​1.4IO的分类​​​​1.5文件IO的接口​​​​1.6......
  • 操作符详解(day13)
    操作符是直接对内存里存储的值进行操作,而函数是更外层的操作方式。以操作整形变量举例:在内存中,整数都是以补码形式存储的,所以操作符可以直接操纵内存中的补码的值,而printf函......
  • 剑指offer——Day13 双指针(简单)
    Day132022.11.19双指针(简单)21.调整数组顺序使奇数位于偶数前面自己实现初步想法是一个指针从开头向右移动,移动到偶数停止;另一个指针从数组中间位置向右移动,移动到奇......
  • Day13:方法重载的理解
    方法的重载方法重载的定义方法的重载是指在类里面定义多个同名的方法,功能相似,但参数列表(个数、类型、顺序)不一样。规则:方法名必须相同方法参数必须不同(个数、类型、......
  • Day13.1:命令行传参的操作
    命令行传参我们可以在程序运行时利用Dos命令行给主方法main传递参数来得到一些反馈信息。publicclassdemo{publicstaticvoidmain(String[]args){//m......