首页 > 其他分享 >20230314 3.2. 二叉树

20230314 3.2. 二叉树

时间:2023-06-21 16:36:15浏览次数:32  
标签:左子 结点 20230314 右子 BT 3.2 二叉树 BinTree

二叉树的定义

二叉树T:一个有穷的结点集合。

  • 这个集合可以为空
  • 若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。

二叉树具体五种基本形态:

  • 空二叉树;
  • 只有根结点的二叉树;
  • 只有根结点和左子树TL的二叉树;
  • 只有根结点和右子树TR的二叉树;
  • 具有根结点、左子树TL和右子树TR的二叉树。

二叉树的子树有左右顺序之分

几种特殊的二叉树

  • 斜二叉树(Skewed Binary Tree)、退化二叉树
    • 一条线的形状
  • 完美二叉树(Perfect Binary Tree) / 满二叉树(Full Binary Tree)
    • 所有子节点都是满的
  • 完全二叉树(Complete Binary Tree)
    • 子节点不一定满,但是从上到下,从左到右和满二叉树相同

几个重要性质

  • 一个二叉树第 i 层的最大结点数为:\(2^{i-1}\) (\(i \ge 1\))
  • 深度为k的二叉树有最大结点总数为: \(2^k - 1\) (\(k \ge 1\))
  • 对任何非空二叉树 T,若n0表示叶结点的个数、n2是度为2的非叶结点个数,那么两者满足关系 \(n0 = n2 +1\)

抽象数据类型定义

类型名称:二叉树

数据对象集:一个有穷的结点集合。

若不为空,则由根结点和其左、右二叉子树组成。

操作集: BT ∈ BinTree, Item ∈ ElementType,重要操作有:

  • BinTree CreatBinTree( ):创建一个二叉树
  • Boolean IsEmpty( BinTree BT ): 判别BT是否为空
  • void Traversal( BinTree BT ):遍历,按某顺序访问每个结点

四种常用的遍历方法:

  • void PreOrderTraversal( BinTree BT ):先序----根、左子树、右子树;
  • void InOrderTraversal( BinTree BT ): 中序---左子树、根、右子树;
  • void PostOrderTraversal( BinTree BT ):后序---左子树、右子树、根
  • void LevelOrderTraversal( BinTree BT ):层次遍历,从上到下、从左到右

存储结构

顺序存储结构

按从上至下、从左到右顺序存储,适合完全二叉树,一般二叉树也可以采用这种结构,但会造成空间浪费

n个结点的完全二叉树的结点父子关系:

  • 非根结点(序号 i > 1)的父结点的序号是 i/2
  • 结点(序号为 i )的左孩子结点的序号是 2i, (若 \(2*i \le n\),说明有左孩子);
  • 结点(序号为 i )的右孩子结点的序号是 2i+1, (若 \(2*i+1 \le n\),说明有右孩子);

链表存储

typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode {
    ElementType Data;
    BinTree Left;
    BinTree Right;
}

标签:左子,结点,20230314,右子,BT,3.2,二叉树,BinTree
From: https://www.cnblogs.com/huangwenjie/p/17490494.html

相关文章

  • 代码随想录算法训练营第十三天| 层序遍历 226.翻转二叉树 (优先掌握递归) 101. 对
    层序遍历注意:1,使用队列的形式,依次入队,同时对队列进行计数2,知道数目消失,才进行下一个队列代码:1vector<vector<int>>levelOrder(TreeNode*root)2{3vector<vector<int>>result;4if(root==NULL)returnresult;5queue<TreeNode*>selected;6......
  • 数据结构和算法系列课程(01)--- 排序二叉树和红黑树
    把排序二叉树放在这个系列课程的第一个部分似乎有些唐突,但是考虑到它在面试中出现的可能性,把它放在这样的一个位置也就不足为奇了。关于树和二叉树的基础知识,可以到下面的链接中下载我的课件进行了解。下面给出一个排序二叉树的Java实现:packagcom.loonstudio;/***排序二叉树......
  • 单值二叉树
    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false来源:力扣(LeetCode)链接:https://leetcode.cn/problems/univalued-binary-t......
  • 翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]来源:力扣(LeetCode)链接:https://leetcode.cn/problems/invert-binary-tree著作权归......
  • 算法与数据结构Day03——平衡二叉树的根
    #include<stdio.h>#include<stdlib.h>typedefstructnode*AVLTree;structnode{intData;AVLTreeLeft;AVLTreeRight;};intHigh(AVLTreeT){if(!T)return0;intleft=High(T->Left)+1;intright=High(T->......
  • Windows服务器定时重启设置教程 103.216.155.x
    Windows系统的任务计划程序,可以添加计划任务,设置任务开始时间及执行的间隔,实现应用的自动执行。例如:实现定时重启、关机等常见的功能。如何使用参考以下步骤1、新建一个文本文件,将文件后缀改为bat,然后添加如下代码shutdown-r-f-t 0该命令的作用是立即强制重启机器。在文件中单......
  • 扬州服务器租用,扬州BGP高防IP段43.248.184.X
    扬州高防BGP服务器,大带宽、高防御、低延迟、稳定流畅、免费测试。扬州数据中心介绍1、运河西路机房237号数据中心,机柜数量400-500个,位于4楼6楼,每层200多个标准机柜,机柜42U。2、维扬路107号数据中心,400-500个机柜,位于1楼2楼,每层200多个标准机柜。3、扬子江南路9号电信数据中心 电......
  • 二叉树03
    104二叉树的最大深度用递归的写法。递归的思路是,当前树的深度=max(左子树深度,右子树深度)+1  111二叉树的最小深度 对于上面这颗二叉树,离root最近的叶子节点是4,所以最小深度是3(路径1-2-4,有3个节点)。而如果我们直接把递归里的max改成min,由于root节点的左节点是N......
  • 数据结构课程设计2023夏7-4 先序和中序构造二叉树
    本题目要求用先序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其后序序列。输入格式:在第一行中输入元素个数。第二行中输入先序序列,用空格分隔。第三行中输入中序序列,用空格分隔。输出格式:输出此二叉树的后序序列,用空格分隔,最后也有一个空格。输入样例:......
  • 3.2 鱼与熊掌可以兼得的深度学习-2022
    1.问题回顾  在上节的再谈宝可梦、数码宝贝分类问题上,我们提出了机器学习的分类原理.并提出了一个矛盾点:当可选参数过多,loss会变小,但理想和现实差距会很大;当可选参数比较少,loss会变大,但理想和现实差距会减小.现在我们需要一个Loss小,可选参数也少的模型.2.Whywene......