当前位置: 首页 > news >正文

初识树及二叉树

//    一、树概念及结构
//        树是一种非线性的数据结构是有限个节点组成的有层次关系的集合。类似倒挂的树
//  有一个特殊的节点,叫做根节点
// (树+亲缘关系)
//        节点的度:一个节点含有的子树的个数
//        ·叶节点或终端节点:度为零的节点;度不为零的是分支节点
//        ·双亲节点或父节点:子节点的前一个节点
//        ·孩子节点或子节点:一个节点含有的子树的根节点
//        兄弟节点:(亲兄弟)有同一个父节点的两个节点
//        树的度:树的最大节点的度
//        节点的层次:一般从第一层开始,但从第零层开始也行
//        (空树和只有根节点的区分)
// (数组从零开始是为了方便计算,数组名是首元素地址,a[i]等价于*(a+i))
//        ·高度/深度:树中节点的最大层次
//        堂兄弟节点:同一层的节点
//        祖先:从父节点到根节点都是祖先节点(都是直系亲属)
//        子孙节点
//        森林:互不相交的树组成的集合
// 
//        任何一棵树都包含跟和N棵子树(N>=0)
//        树都是由递归定义的:将大问题拆解为小问题,小问题被拆解为更小的问题,但最后会被拆成一个
// 可被直接解决的问题
// 注意:树形结构中,子树之间不能有交集,否则就不是树形结构
//         除了根节点之外,每个节点有且仅有一个父节点
//         由N个节点的树,有(N-1)个新节点
//

//#define N 4 //明确告诉树的度
//struct TreeNode
//{
//    int val;
//    struct TreeNode* subs[N];
//};

//未明确告诉树的度
//struct TreeNode
//{
//    int val;
//    SepList subs;//顺序表内部存struct TreeNode*
//};

//左孩子右兄弟表示法
struct TreeNode
{
    int val;
    struct TreeNode* leftchild;
    struct TreeNode* rightbrother;//无论一个父亲有多少个孩子,child都指向左边开始的第一个孩子
    //若没有brother,则指向空
    //因此找到所有孩子,只需要找到第一个孩子,然后以链表遍历的方式获取每个孩子节点
};
//TreeNode* parent;
// TreeNOde* cur = parent->leftchild;
// while(cur)
// {
//        cur = cur->rightchild;
// }


// 二叉树的概念及结构
//    二叉树是树的子集,每个节点最多有两个孩子,有一个根节点,加上两棵左子树和右子树
// 特殊的二叉树——满二叉树和完全二叉树
// 满二叉树:每一层的每个节点的度都是二(除了叶子),h层的满二叉树共有2^h-1个节点
// 完全二叉树:共有h层,前(h-1)层都是满的,最后一层从左到右连续
// ——满二叉树可以认为是特殊的完全二叉树
// 
// 
// 
// 二叉树的存储:
// leftchild data rightchild
// 完全二叉树的顺序存储:
// 逻辑结构:想象出来的(即二叉树的示意图);物理结构:内存中实实在在存在的
// 用数组存储完全二叉树,用数组下表来判断父子关系
//        假设父亲在数组中的下表:i
// 左孩子在数组中的下表:2*i+1
// 右孩子在数组中的下表:2*i+2
//        假设孩子在数组中的下标是:j
// 则父亲在数组中的下标是(j-1)/2
// ——因为存在取整的概念,所以奇数偶数没有区别
// 
// 
// 数据结构里有堆(堆排序)和栈(一头进出),C语言里也有堆和栈,这里堆和栈是内存区域划分
// 数据结构里的二叉树:
// 第一个条件:是完全二叉树;第二个条件:任何一个父亲>=孩子——大堆
// 是完全二叉树,任何一个父亲<=孩子——小堆
// 小堆不一定是升序,大队也不一定是降序,因为孩子们的大小关系未定
//        根是最小的或者最大的,可以用来找极值
// 给一个数组,判断是不是堆,
//

相关文章:

  • 18.字符串函数
  • 【Redis】持久化机制:RDB / AOF 的应用与场景
  • 48-Oracle CDB下的SID-实例名-服务名
  • LVS+Keepliaved高可用群集
  • 【web应用】Vue 3 中实现 Chart.js 柱状图:详细指南
  • 【Leetcode】每日一题 —— No.2966
  • new()和new[]有什么区别?
  • 12.8Java Swing 中的MVC
  • MySQL 类型转换与加密函数深度解析
  • 【AI Study】第四天,Pandas(1)- 基础知识
  • 《仿盒马》app开发技术分享-- 订单结合优惠券结算(60)
  • 【Python打卡Day22】kaggle泰坦尼克@浙大疏锦行
  • 黑马点评,请求被取消,首页店铺类型和blog列表无法正常展示
  • Spring MVC 处理静态资源请求 - ResourceHandler
  • Python多态的简单分享
  • HarmonyOS性能优化——感知流畅优化
  • C++ 第一阶段 基本语法 - 第一节:变量与数据类型详解
  • 19.数学函数
  • eps8266作为AP服务端 esp32c3作为STA客户端
  • LVS +Keepalived 高可用群集
  • 企业云网站建设/国外免费域名
  • 卖书的网站怎么做/推广资源整合平台
  • 哪个汽车网站汽贸店免费做/广州营销推广
  • 阅读网站怎么做/网站策划书模板范文
  • 外贸在哪个网站做/品牌运营公司
  • 简述网站建设的主要内容/网站建设7个基本流程