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

树(入门)

1.树的定义

树是一种非线性结构,用它来描述有分支和层次特性的数据集合。在树型结构中,二叉树是最常用的结构。具有分支个数确定、又可以为空,并有良好的递归特性,特别适宜于程序设计。

2.基本概念

树的概念

一棵树是由n(n>0)个元素组成的有限集合,其中:

(1)每个元素称为结点(node)

(2)有一个特定的结点,称为根结点或树根(root)

(3)除根节点外,其余节点能分成m(m>=0)个互不相交的有限集合 T(0)-T(m-1)。其中的每一个子集都是一个树,这些集合被称为这棵树的子树。

树的度

a.树的结点包含一个数据及若干指向子树的分支
b.结点拥有的子树数目称为结点的度–度为0的结点称为叶节点,度不为0的结点称为分支结点
c.树的度定义为所有结点中度的最大值

树的深度

3.树的存储

方法1:父亲表示法
记录每个节点的父亲节点,根节点没有父亲

方法2:树型双向链表

4.二叉树

二叉树是每个节点最多只有两个子树的数结构,两个子树称为左子树和右子树。

二叉树的存储
方法一:数组存储

用一维数组存储二叉树中的节点,数组的下标要能体现节点之间的逻辑关系。
如果某个节点的索引为 i,(假设根节点的索引为 0)则在它左子节点的索引会是 2i+1,以及右子节点会是 2i+2。

方法二:链表存储

在二叉树中,一个父节点最多只允许 2 个子节点,所以我们只需要一个存储数据和左右子节点的指针,这样的结构就是链式存储,也叫二叉链表。

二叉树的遍历 
例子1

例子2

 代码
#include <iostream>using namespace std;const int MAX_SIZE = 100;int tree[MAX_SIZE];
int leftChild[MAX_SIZE];
int rightChild[MAX_SIZE];
int n; // Number of nodesvoid buildTree() 
{cin >> n;for (int i = 0; i < n; i++) {cin >> tree[i];}for (int i = 0; i < n; i++) {leftChild[i] = 2 * i + 1;rightChild[i] = 2 * i + 2;}
}void xprint(int root) {if (root >= n || tree[root] == -1) return;cout << tree[root] << " "; xprint(leftChild[root]);xprint(rightChild[root]);
}void zprint(int root) {if (root >= n || tree[root] == -1) {return;}zprint(leftChild[root]);cout << tree[root] << " "; zprint(rightChild[root]);
}void hprint(int root) 
{if (root >= n || tree[root] == -1) return;hprint(leftChild[root]);hprint(rightChild[root]);cout << tree[root] << " "; 
}int main() 
{buildTree();xprint(0); cout << endl;zprint(0); cout << endl;hprint(0);return 0;
}


http://www.mrgr.cn/news/64683.html

相关文章:

  • Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)
  • vulhub之phpmyadmin
  • 【WebRTC】WebRTC的简单使用
  • 鸿蒙进阶-AlphabetIndexer组件
  • GitHub中搜索项目方法
  • 为啥学习数据结构和算法
  • 自杀一句话木马(访问后自动删除)
  • MySQL——事务
  • Redis安装与使用 + Springboot整合Redis
  • wpf中行为
  • 502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
  • IDEA2024下安装kubernetes插件并配置进行使用
  • 代理IP地址和端口是什么?怎么进行设置?
  • 达人探店和好友关注功能(feed流的使用,滚动分页查询)
  • Python 有哪些优雅的代码实现让自己的代码更pythonic?
  • 串口接收,不定长数据接收
  • 00 递推和递归的核心讲解
  • LeetCode27:移除元素
  • JavaEE进阶---第一个SprintBoot项目创建过程我的感受
  • 1.kubernetes作用及组件
  • (五)PostgreSQL数据库操作示例
  • 如何使用Python WebDriver爬取ChatGPT内容(完整教程)
  • 我为何要用wordpress搭建一个自己的独立博客
  • Linux基础 文件与目录
  • int a[5]里面的 a表示a[0], a执行包含5个整数的数组的指针
  • OTFS的基本原理(通俗易懂)