首页 > 其他分享 >【LeeCode】二叉树理论

【LeeCode】二叉树理论

时间:2023-02-18 17:31:27浏览次数:51  
标签:结点 遍历 递归 理论 LeeCode 二叉树 链式 节点

二叉树分类


没有数值

满⼆叉树


如果⼀棵⼆叉树只有度为0的结点和度为2的结点,并且度为0的结点在同⼀层

上,则这棵⼆叉树为满⼆叉树


​满⼆叉树,也可以说深度为k,有2^k-1个节点的⼆叉树


【LeeCode】二叉树理论_递归


没有数值

完全⼆叉树

在完全⼆叉树中,除了最底层节点可能没填满外,其余每层节点数

都达到最⼤值,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置。


若最底层为第 h

层,则该层包含 1~ 2^h -1 个节点


【LeeCode】二叉树理论_叉树_02



【LeeCode】二叉树理论_递归_03


有数值

⼆叉搜索树

(有序树)


若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值;

若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值;

它的左、右⼦树也分别为⼆叉排序树


【LeeCode】二叉树理论_叉树_04


有数值

平衡⼆叉搜索树

也称: AVL

它是

⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过1,并且左右两个⼦树都是⼀棵平衡

⼆叉树


【LeeCode】二叉树理论_叉树_05



二叉树存储

⼆叉树可以链式存储(即,指针),也可以顺序存储(即,数组)

链式存储


是通过指针把分布在散落在各个地址的节点串联⼀起

​⽤链式表⽰的⼆叉树,更有利于我们理解,所以⼀般我们都是⽤链式存储⼆叉树。


【LeeCode】二叉树理论_结点_06


顺序存储



元素在内存是连续分布的

如果⽗节点的数组下表是i,那左节点: i * 2 + 1,右节点: i * 2 + 2



【LeeCode】二叉树理论_叉树_07



二叉树的遍历

⼆叉树主要有两种遍历⽅式:【深度】 + 【广度】

  1. 深度优先遍历

(往下走,然后往回走)

前序遍历(递归法,迭代法)

   根左右

中序遍历(递归法,迭代法)

    左根右

后序遍历(递归法,迭代法)

    左右根

一般使用栈(先进后出·)


  1. ⼴度优先遍历

(一层一层遍历完再往下走)

层次遍历(迭代法)

一般使用队列实现(FIFO, 先进先出)

【LeeCode】二叉树理论_递归_08

二叉树的定义

二叉树的链式定义

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/


⼆叉树的递归遍历

递归三要素: 1. 确定参数和返回值  2. 确定终止条件 3. 确定递归逻辑





学习参考

​https://programmercarl.com​

标签:结点,遍历,递归,理论,LeeCode,二叉树,链式,节点
From: https://blog.51cto.com/u_13682316/6065481

相关文章

  • 代码随想录算法训练营Day18 二叉树
    代码随想录算法训练营代码随想录算法训练营Day18二叉树|513.找树左下角的值112.路径总和113.路径总和ii106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历......
  • 【LeeCode】406. 根据身高重建队列
    【题目描述】假设有打乱顺序的一群人站成一个队列,数组 ​​people​​​ 表示队列中一些人的属性(不一定按顺序)。每个 ​​people[i]=[hi,ki]​​​ 表示第 ​​i​......
  • lc二叉树中序遍历
    94.二叉树的中序遍历给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出......
  • 【LeeCode】300. 最长递增子序列
    【题目描述】给你一个整数数组 ​​nums​​ ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如......
  • 【LeeCode】674. 最长连续递增序列
    【题目描述】给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 ​​l​​ 和 ​​r​​(​​l<r​​)确......
  • 【LeeCode】718. 最长重复子数组
    【题目描述】给两个整数数组 ​​nums1​​ 和 ​​nums2​​ 两个数组中 公共的 、长度最长的子数组的长度 。​​​https://leetcode.cn/problems/maximum-length-......
  • 算法随想Day15【二叉树】| LC110-平衡二叉树、LC257-二叉树的所有路径、LC404-左叶子
    LC110.平衡二叉树递归做法一次通过,其实也就是对比:某个节点的左子树和右子树的最大深度的绝对值不大于1,即可认为是平衡二叉树classSolution{public:boolflag;......
  • 【LeetCode二叉树#00】二叉树的基础知识
    基础知识分类满二叉树如果二叉树中除了叶子结点,每个结点的度都为2,则此二叉树称为满二叉树。完全二叉树除了底层外,其他部分是满的,且底层从左到右是连续的,称为完全二......
  • 为什么mysql 要用B+树而不用二叉树
          1.B+树的层级更少B+树的高度一般为2-4层,所以查找记录时最多只需要2-4次IO,相对二叉平衡树已经大大降低了。范围查找时,能通过叶子节点的指针获......
  • 理论+实践,揭秘昇腾CANN算子开发
    摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程。然后以开发一个DSLAdd算子为例,讲解算子开发的基本流程。本文分享自华为云社区《昇腾CANN算子......