- 博客(11)
- 收藏
- 关注
原创 输出二叉树前序序列中的第K个结点内容&测试
假设已经建立好二叉树,知道二叉树的前序序列,要输出前序序列中第k(1<=k<=n)个结点中的数据应该怎么操作?此次测试用的是三层满二叉树,层次遍历序列为ABCDEFG总体思路就是递归的去前序遍历二叉树,设置一个全局变量i,每过一个结点就+1当作计数器,等i==k时返回那个结点的值,思路很简单但在递归这个问题上懵了。建立二叉树沿用之前【已知前序中序创建二叉树】的代码简历,经过几次试错……...
2018-04-18 17:16:18
2339
原创 实践操作——验证swap()函数是否正确
在写转换二叉树的swap()函数时发现和教材答案有所不同,为验证正确性写了如下代码测试测试用的是一个三层满二叉树,共7个结点。给出先序和中序序列以创建二叉树。该树层次遍历顺序为ABCDEFGBiTree PreInCreat(char A[],char B[],int l1,int h1,int l2,int h2){//创建二叉树 int i,llen,rlen; BiTree root;...
2018-04-05 22:55:33
691
原创 数据结构——交换二叉树中所有结点的左右子树(所有结点换位置)
采用递归的思想,先思考对单个结点要进行的操作:现有本层结点T,函数的目的在于将T->lchild连到原本的右子上,把T->rchild连接到原本的左子上,因此语句结构应为:T->lchild=fun();T->rchild=fun();进一步写为:T->lchild=swap(T->rchild);T->rchild=swap(T->lchild);...
2018-04-05 17:51:04
8564
原创 数据结构——计算二叉树中二分结点的个数
方法一:构造一个遍历(层次/中序/先后序应该都可以的),在访问每一个结点时用语句(b->rchild!=NULL&&b->rchild!=NULL)检查该结点,若满足则全局变量NUM++,最后返回NUM即二分结点数目//非递归方法int DsonNode(BiTree T){ InitQueue(Q); BiTree p; int NUM=1;//*C语言是否允...
2018-04-05 16:40:45
667
原创 数据结构——判断二叉树是否为完全二叉树
该方法采取层次遍历(回忆层次遍历的实现需要借助一个队列,一边进队一边出队,在出队的同时对结点进行visit())对于完全二叉树来说,当访问到空结点时说明该树已经完结,之后队列中也将一直为空。但非完全的二叉树在空结点之后仍有可能出现数据。根据这个不同,只需正常层次遍历,在出队遇到NULL时,开始检测后边的队伍中是否有非空结点,知道整个队列结束(front==rear),若出现则说明树不完全bool ...
2018-04-05 14:27:12
1649
1
原创 数据结构——已知先序和中序序列,建立二叉树的二叉链表
现在已经知道二叉树的先序和中序序列,分别存储在数组BiTree A[]和B[]中。A代表先序本方法要用到递归,采取一种自顶向下开辟结点空间,而自底向上使连接结点的思路①首先开辟root空间,并将当前先序序列A中第一号元素赋到root中(之所以说当前A中第一号是因为随着程序运行序列A范围减小,每次读入新序列的第一个元素才能保证根结点正确???)②在B中找到和root值一样的那个结点(记下它的序号i)...
2018-04-05 14:17:41
4644
1
原创 数据结构学习——计算二叉树的层数&用同一思路计算每层结点个数
1.计算层数主体思路是用队列构建层次遍历。设计一个last用来标记front正在移动的当前层的最后一个结点,level来标记层数(计数器)因为rear肯定先于front进入下一层进行结点添加,front能够来到这层时,就说明rear早已把这一层结点铺完,现在正在front的下一层,因此找到一个时机在rear铺完该层的最后一个结点时令last=rear,把最后结点标记的这一操作是可行的。这个时机就是...
2018-03-31 22:26:07
8175
3
原创 数据结构学习——二叉树的层次遍历:上下左右&下上右左
【上下左右】代表从上到下同时从左往右的遍历顺序,上下左右和下上右左其实是同一个问题。1.上下左右遍历上下左右遍历要借用到一个队列。树根A第一个入栈,然后根结点的左右孩子BC紧随其后。front移动到A时把A访问并出队,接着front向队列后继续移动,在front不断后移的过程中,每移动到一个新的结点(队列中的一个空)就把这个结点的孩子lchild和rchild(如果有)再加入到队列中(先加左再加右...
2018-03-31 20:04:52
1888
原创 数据结构学习——非递归方法遍历二叉树
二叉树的非递归遍历要借助栈,栈起到的作用是保护现场?或者说记录来的路程,因为没有线索指向你当前结点的前驱,当当前结点处理完要返回上几层中的结点(来路)的时候就没有办法,因此需要用栈来记录来的过程,需要的时候用GetTop()或者直接Pop()函数就可以找到来的路。1.前序void PreOrder(BiTree T){ InitStack(S); BiTree p=T; while(!=St...
2018-03-30 17:27:46
227
原创 数据结构学习——线索二叉树的遍历
在上一篇中我们已经将二叉树线索化,一个线索化了的二叉树,可以按照线索顺序采用非递归的方法将二叉树遍历。具体思路如下:按线索顺序遍历的关键在于怎么找到下一个结点顺利进入,要找下一个结点就要根据当前结点屁股上的线索来找。观察可知rchild有两种指向:一种是指向后继的,rtag=1; 一种是指向右孩子(该右孩子是右子树...
2018-03-26 19:28:04
355
原创 数据结构学习记录——中序情况下线索二叉树的构建
先规定线索二叉树结点结构如下struct ThreadNode{ element data; struct ThreadNode *lchild,*rchild; int ltag,rtag;}ThreadNode,*ThreadTree;ltag=0 表示lchild指向左孩子ltag=1 表示lchild指向前驱rtag=0 表示rchild指向右孩子rtag...
2018-03-25 22:43:16
237
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人