首页 > 其他分享 >二叉树详解

二叉树详解

时间:2024-03-21 22:59:15浏览次数:25  
标签:结点 TreeNode 度为 右子 详解 二叉树 节点

二叉树详解

一:什么是树

1:概念

树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因为它看起来像一棵倒挂着得树,根朝上,叶子朝下:如图所示:
在这里插入图片描述
在这里插入图片描述注意:
树形结构中子树之间不能有交集,否则就不是树形结构

2:树的特点##

1:子树是不能相交的;
2:除了根节点以外,每个节点有且仅有一个父节点;
3:一个N个节点的树有N-1条边;

3:树的一些重要概念

在这里插入图片描述

结点的度:一个结点含有子树的个数称为结点的度.如上图,A结点的度为3,B结点的度为2;
树的度:一棵树中,所有结点度的最大值称为树的度
叶子节点:度为0的结点称为叶子结点
结点的层次:从根结点开始,根为第一层,根的子结点为第二层,以此类推
树的高度:树中结点的最大层次,上图树的高度就是3

二:二叉树

1:二叉树的概念

一棵二叉树是由根结点,左子树,右子树组成的,而左子树又是由根结点,左子树,右子树组成的,右子树也是由根结点,左子树,右子树组成的.
所以二叉树是递归定义的

在这里插入图片描述

2:二叉树的特点

1:二叉树不存在度大于2的结点;
2:二叉树的子树有左右之分,次序不能颠倒;

3:特殊的二叉树:

1:满二叉树:每一层结点个数都是2^(n-1)个结点(n表示二叉树的层数,从1开始)
如下图:
在这里插入图片描述

2:完全二叉树:
二叉树的结点是从上到下,从左到右,依次存放的.
如下图:
在这里插入图片描述

三:二叉树的性质

1:若规定根结点的层数为1,则一棵非空二叉树的第i层最多放2^(N-1)个结点.
2:若规定根节点的二叉树的深度为1,则深度为k的二叉树的最大结点数是2^k-1;
3:假设:叶子结点个数有n0个,度为2的结点个数有n2个,则n0=n2+1;
4:共奇数个结点的完全二叉树,没有度为1的结点;共偶数个节点的完全二叉树,只有一个度为1的结点
5:具有n个结点的完全二叉树的深度为log(n+1)向上取整,(log(n)+1向下取整)
6:假设给完全二叉树编号,(从0开始),则编号为i的结点,父节点为(i-1)/2;
左孩子编号为:2i+1,如果2i+1<n,则没有左孩子
右孩子编号为2i+2,如果2i+2<n,则没有右孩子

四:二叉树的存储

二叉树的存储结构分为:链式存储和顺序存储
在这里主要介绍链式存储

 /**
     * 孩子表示法
     */
    static class TreeNode {
        int val;//数值域
        TreeNode left;//左孩子的引用,
        TreeNode right;//右孩子的引用
    }
    /**
     * 孩子双亲表示法
     */
    static class TreeNode{
        int val;//数值域
        TreeNode left;//左孩子的引用
        TreeNode right;//右孩子的引用
        TreeNode parent;//当前结点父结点的引用
    }

标签:结点,TreeNode,度为,右子,详解,二叉树,节点
From: https://blog.csdn.net/2302_77978695/article/details/136845839

相关文章

  • ConcurrentHashMap底层详解
    ConcurrentHashMap是线程安全且高效的HashMap。一、使用原因在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于此产生了ConcurrentHashMap。1.线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率......
  • nmon监控工具使用方法详解
    在信息化时代,系统监控对于确保服务器和应用的稳定运行至关重要。nmon(Nigel’sMonitor)作为一款强大的性能监控工具,以其直观、全面的监控能力,赢得了众多系统管理员的青睐。本文将详细介绍nmon监控工具的使用方法,帮助读者更好地利用这一工具,提升系统监控效率。一、nmon监控工......
  • 二叉树的深度优先遍历(力扣94,144,145)
    文章目录题目前知二叉树的遍历方式有什么?递归和迭代是什么?题解一、思路二、解题方法三、Code总结题目Problem:144.二叉树的前序遍历Problem:94.二叉树的中序遍历Problem:145.二叉树的后序遍历前知二叉树的遍历方式有什么?二叉树主要有两种遍历方式:......
  • JavaScript初识及基本语法详解
    JavaScript是一种轻量级的解释型或即时编译型的编程语言。它最初被设计为在浏览器中用于与网页进行交互,但随着时间的推移,它已经成为了后端开发、游戏开发、桌面应用开发等多个领域的重要工具。1.JavaScript初识1.1历史与用途历史:由BrendanEich在1995年开发,最初......
  • 236. 二叉树的最近公共祖先c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*lowestCommonAncestor(structTreeNode*root,structTreeNode*p,structTreeNode*q){......
  • 多线程并发聊天室简单实现代码详解 -- 涉及网络编程,多线程和线程同步的知识
            本项目主要完成多线程并发聊天室的基础功能,即多个客户端之间通过服务器可以实现群发消息,重点在于学习网络编程,多线程和线程同步的基础知识(基于Linux)。    下面我会详解每一部分的代码。1.主线程        1.1首先由于是自己在电脑里面测试,......
  • 257. 二叉树的所有路径c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/inttemp[400];voiddf......
  • B树B+树,字典树详解,哈夫曼树博弈树
    目录B树:B-TreeB+树字典树:TrieTree 哈夫曼树博弈树B树:B-Tree多路平衡搜索树1.M阶B树,就是M叉(M个指针)。2.每个节点内记录个数<=M-1。3.根节点记录个数>=1。4.其余节点内记录个数>=ceil(m/2)-1(向上取整)。5.每个节点内的记录从左至右从大到小有序。6.当前记录的左......
  • Impostors详解——纸片构筑的美丽幻觉
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!写在前面早前,我截帧分析了《CallofDragons》,具体内容可以看《〈CallofDragons〉渲染截帧分析与迷思》,在其中提到了《CallofDragons》中使用......
  • Linux系统下的文件描述符fd详解
    文章目录文件描述符本作者从代码及源码的角度来总结探究文件描述符fd参考:韦东山Linux嵌入式视频文件描述符Linux系统下一切皆文件。文件描述符是操作系统中用来唯一标识一个已打开文件的整数。本质上来说就是索引,即根据索引值寻找到对应的文件,可对其进行相应......