
算法与数据结构
文章平均质量分 60
zhenzhu2022
这个作者很懒,什么都没留下…
展开
-
二叉树例题(二)
【例题1】二叉树采用链式存储结构,设计算法实现左右子树的互换。 ps:交换左右子树是指交换每一个结点的左右子树 【思路】原创 2022-04-17 11:05:04 · 357 阅读 · 0 评论 -
树的应用(堆和哈夫曼树)
目录堆哈夫曼树(最优二叉树) 堆 n个元素的序列,K = {k1, k2,…,kn},把它的所有元素按完全二叉树层序存储在一个一维数组中,并满足:Ki <= K2i 且 Ki<=K2i+1 ,或Ki >= K2i 且 Ki >= K2i+1,则称为小堆(或大堆)。 最大堆: 根节点最大的堆 最小堆: 根节点最小的堆。 ps:堆中的元素可以重复 堆的操作 #include<stdio.h> #include<stdlib.h> typedef stru原创 2022-04-17 11:03:50 · 555 阅读 · 0 评论 -
二叉树的例题(一)
树结构的创建 typedef struct TreeNode *BinTree; struct TreeNode{ int data; BinTree left; BinTree right; }; 【例题1】输出二叉树的叶子结点 有条件输出问题。可以在二叉树的任意一个遍历算法中增加检测结点 的 “左右子树是否都为空” 条件判断语句。 void PrintLeaves(BinTree BT) { if(BT) { if(!BT->left&&!BT->right)原创 2022-04-13 15:23:40 · 1650 阅读 · 2 评论 -
二叉树的遍历
目录一、先序遍历二、中序遍历三、后序遍历四、非递归算法(以中序遍历为例)五、层序遍历六、附STL中栈和队列的常用函数栈队列 建立树结构 typedef struct TreeNode *BinTree; struct TreeNode{ int data; BinTree left; BinTree right; }; 一、先序遍历 (1)访问根节点 (2)先序遍历左子树 (3)先序遍历右子树 先序遍历二叉树的递归算法在二叉链表上的实现: void PreOrderTraversal(BinTre原创 2022-04-12 23:14:13 · 113 阅读 · 1 评论 -
平衡二叉树
定义:平衡二叉树是一棵二叉排序树,或者为空,或者满足以下条件: (1)左右子树高度差的绝对值不大于1; (2)左右子树都是平衡二叉树。 平衡因子:对于二叉树中任一结点T,其平衡因子(Balance Factor,简称 BF)定义为BF(T) = hL-hR,其中hL和hR分别为T的左、右子树的高度。 平衡化旋转:如果在一棵 AVL 树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡。我们称此调整平衡的过程为平衡旋转。 平衡化旋转的类别 LL型:新插入结点在A的左孩子(L)的左子树原创 2022-04-07 22:29:27 · 4333 阅读 · 3 评论