- 博客(8)
- 收藏
- 关注
原创 森林孩子—兄弟链表形式的层次遍历
关于森林(孩子-兄弟链表形式)的层次遍历:它类似于图的广度优先搜索(BFS) 首先要清楚孩子-兄弟链表表示森林的特点。 接下来看伪代码://使用队列来依次存储同层结点void LevelTraverse(csTree T) { //csTree 表示树的结构体指针 csTree P = T; csTree K ; Queue sqQueue;...
2018-12-15 23:27:50
4865
4
原创 如何判断一个二叉树是否是二叉排序树(二叉查找树)
以下用递归的方法来解决:bool IsBSTree(BiTree T) { if (!T) { //若传入的是空树,则返回false。 return false; } else if (T->lchild == NULL && T->rchild == NULL) { //若...
2018-12-07 23:05:21
5328
2
原创 直接插入排序以及希尔排序(ShellSort)
希尔排序是直接插入排序的优化版它的思想就是先让局部有序,然后再让整体有序。也就是先对局部进行直接插入排序,然后在对整体进行直接排序。对局部直接插入排序也就是不断改变步长,最后再让步长等于1,也就是对整体进行直接插入排序。 这是直接插入排序实现:void InsertSort(int k[], int n) { //n为元素个数 int i, j; for (i = 2; ...
2018-12-06 21:55:44
158
原创 堆排序完整实现
首先关于堆排序 它是选择排序的进阶版 不要误认为真的是堆,其实是数组,只不过理解成堆(有助于排序),有大顶堆(开头元素最大) 还有小顶堆(开头元素最小) ,它和我们前面学的二叉树结构有很大的相似度刚开始时要把待排序这个序列构建成一个大顶堆或小顶堆 即满足根结点元素要比它的每个子结点元素都要大 。它就是不断通过构建完全二叉树 ,每次把最大的元素调整到堆顶(也可以把最小的元素调整到堆顶)...
2018-12-04 23:34:57
136
原创 如何将树的 "二叉链表存储形" 式转化为 "顺序存储形式" 以及树的 “顺序存储形式” 转化为 “二叉链表存储形式”
//首先将树的二叉链表存储形式转化为树的顺序存储形式//首先知道树的顺序存储结构 它是利用完全二叉树的性质来定义的 不管一棵二叉树什么结构 它都可以补全成完全二叉树//其实我们把二叉树的顺序表从1开始 (有些也可以从0开始 此时它的左右孩子就变成了 2*i+1 / 2*i+2)//它的左右孩子为2*i 2*i+1 可以直接通过树的遍历算法来实现 用树的结点来做索引...
2018-12-03 23:25:41
4530
3
原创 如何打印一个结点到根结点的路径并且打印该节点所在的层数(该节点到根结点的长度)
//首先解决二叉树的问题必须把根结点和左右结点分开解决//如何找到这个结点的路径呢? 利用栈的特点 每次遍历一个结点 首先将它入栈//之后判断这个结点是否等于所要查询的结点 若等于直接打印栈里的元素 直到栈空//若不等于 依次递归它的左右节点 若一个结点的左右节点均没有找到目标 则出栈该结点//直到找到 height即为该节点的高度 以及到根结点的长度(边数)void Fi...
2018-12-02 16:06:30
676
1
原创 如何求一个森林的高度
//首先用二叉链表形式(孩子—兄弟链表)表示一个森林//在求二叉树高度基础上加以修改//每次右子树的高度不发生改变 (因为它们在森林上都是在同一层上)int Height(BiTree T) { if (T == NULL) { return 0; } else { int a, b; a = Height(T->lchild)+1; b = Height(...
2018-12-01 23:34:04
3190
2
原创 平衡二叉树(AVL)的完整实现
#include "stdafx.h"#include <iostream>#define LH 1#define EH 0#define RH -1using namespace std;typedef struct BiTNode { int data; int bf; //平衡因子 BiTNode *lchild, *rchild;}BiTNod...
2018-11-30 23:57:46
220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人