数据结构--树

1. 树

1.1基本概念

   每个节点只有一个前驱节点(父节点),有0~n个后继节点(子节点),叶子节点没有子节点,唯一 没有前驱节点的是根节点。

n 个节点的边为n-1

实现方式:递归,根->字树

根节点:深度唯一,树中唯一没有父节点的节点

子节点:一个节点的后继节点为字节点

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

深度:根节点到节点中边的数量,树的深度就是所有叶子结点的最大值

高度:节点到叶子节点的边的数量

兄弟节点:拥有共同父亲节点的子节点

路径:一个节点到另一个节点的边构成的有序的集合,任意两个路径唯一

基本结构

struct node

{

    int data;                   //数据域

    struct node *first_child;   //第一个子节点

    struct bode *next_sibing;   //第一个兄弟节点

}

2. 二叉树

每个节点最多只有两个子树的树,称为二叉树

左孩子,左子树  ; 右孩子,右子树

满二叉树:存储结构 完全二叉树:存储结构

1. 顺序存储,基于数组实现(数组的下标随机访问的时间复杂度O(1))

- 满二叉树

- 完全二叉树

  - 堆

  - 优先级队列

链式存储结构定义

 

struct TreeNode {
int data; // 数据域
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
};

堆是一种特殊的完全二叉树,其中每个节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。你给出的数组 [12, 9, 23, 5, 17, 42, 56, 11, 20, 3] 可以被看作是一个堆(但不一定是最大堆或最小堆,这取决于具体的堆属性)。堆的常用操作包括插入(堆化上调)、删除(堆化下调)、以及基于堆的排序算法(如堆排序)。

二叉搜索树 (BST)

二叉搜索树是一种特殊的二叉树,其中对于树中的每个节点X,其左子树中的所有项的值都小于X中的项,而其右子树中的所有项的值都大于X中的项。。

二叉树遍历

你已经列出了四种基本的二叉树遍历方法:

  • 先序遍历:根 -> 左 -> 右
  • 中序遍历:左 -> 根 -> 右
  • 后序遍历:左 -> 右 -> 根
  • 层序遍历:从上到下,从左到右遍历每个节点

对于你给出的完全二叉树 [A, B, C, D, E, F, G, H, I, J, K],你已经正确地写出了各种遍历的结果。

示例代码(遍历)

由于这里无法直接展示完整的遍历代码,我将给出一个简单的中序遍历的伪代码框架,以帮助你理解如何编写遍历函数。

 

void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left); // 遍历左子树
printf("%d ", root->data); // 访问根节点
inorderTraversal(root->right); // 遍历右子树
}
}

对于其他遍历方式,你可以通过调整访问根节点的位置(在遍历左子树之前、之后或与之并列)来实现。层序遍历则通常使用队列来实现。

例子

12,9, 23, 5, 17, 42 ,56 , 11, 20,3

                   12

        9                    23

    5       11          17         42  

3      _            _       20  _      56

二叉树遍历

- 先序遍历: 根->左->右  12,9,5,3,11,23,17,20,42,56

- 中序遍历:  左->根->右  3,5,9,11,12,17,20,23,42,56 排序 最左边为最小值,最右边为最大值

- 后序遍历: 左->右->根  3,5,11,9,20,17,56,42,23,12

- 层序遍历      12,9,23,5,11,17,42,3,20,56

 

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值