数据结构—树

1|0

1|0基本概念

  • 根结点:没有父结点的结点

  • 叶子结点:没有子结点的结点

  • 非叶结点

  • 祖先结点

  • 子孙结点

  • 结点的度:该结点子结点的个数

  • 树的度:树中结点度最大值即为整棵树的度

  • 路径

  • 路径长度

  • 有向树

  • 无向树

  • 结点的层数:从根结点开始, 根结点为0层, 以此类推

  • 结点的深度: 对任意结点x,深度表示根结点到x的路径长度,根结点深度为0

  • 树的深度: 一棵树中结点的最大深度

1|0二叉树:

  • 定义: 度不大于2的树

根-左子树-右子树

1|0二叉树的性质:

  • i层最多有2i个结点(默认根结点为第0层)

  • 树的深度为h, 最少有h个结点, 最多有2h1个结点

  • 结点数为n,深度最多为n, 最少为log2(n+1)

  • 叶子结点数为n0,度为2的结点数为n2,则n0=n2+1

1|0特殊二叉树

  • 满二叉树:除了根结点, 所有结点的度均为2(除叶子结点,所有结点都有左右孩子)

  • 完全二叉树:如果一个二叉树去掉最后一层为一个满二叉树,且最后一层的叶子结点从左到右依次分布

1|0森林、树、二叉树

  1. 一般树转化为二叉树:
    左孩子,右兄弟结构

  2. 树与森林
    树=根+子树森林

1|0二叉树的存储

struct BiNode{ int data; struct BiNode* lchild, rchild; }; typedef struct BiNode* Tree; int Init(Tree &T) { T = nullptr; return 0; }

1|0二叉树的遍历

1|0先序遍历:

  • 根+左子树+右子树
void PreSearch(BiTree T) { if (T == nullptr) return; cout << T -> data << ' '; PreSearch(T -> lchild); PreSearch(T -> rchild); }

1|0中序遍历:

  • 左子树+根+右子树
void InSearch(Tree T) { if (T == nullptr); return; InSearch(T -> lchild); cout << T -> data << ' '; InSearch(T -> rchild); }

1|0后序遍历

  • 左子树+右子树+根
void SucSearch(Tree T) { if (T == nullptr) return; SucSearch(T -> lchild); SucSearch(T -> rchild); cout << T -> data << ' '; }

1|0层序遍历

  • 按层遍历,每一层从左到右
void CenSearch(Tree T) { queue<int> q; if (T != nullptr) q.push_back(T); while (!q.empty()){ auto it = q.front(); q.pop(); if (it -> rchild != nullptr) q.push_back(it -> rchild); if (it -> lchild != nullptr) q.push_back(it -> lchild); } }

1|0应用:

  1. 求树的深度
int Get_depth(Tree T) { if (T == nullptr) return 0; return max(Get_depth(T -> lchild), Get_depth(T -> rchild)) + 1; }
  1. 求结点总数
int Get_num(Tree T) { if (T == nullptr) return 0; return Get_num(T -> lchild) + Get_num(T -> rchild) + 1; }
  1. 确定一个二叉树
  • 中序+前序
  • 中序+后序

__EOF__

本文作者lhqwd
本文链接https://www.cnblogs.com/lhqwd/p/15769577.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   lhqwd  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示