数据结构
顶锅猫
这个作者很懒,什么都没留下…
展开
-
建立中序线索二叉树,并分别从第一个结点和最后一个结点遍历
任务建立一颗中序线索二叉树;分别从第-一个结点和最后一个结点出发输出中序遍历结果;输出某结点的前趋和后继结点思路:线索二叉树结构类型typedef struct treenode{ char data; struct treenode *lchild,*rchild; int ltag,rtag; //记录指针与指向孩子结点还是后继或前驱 tag为0表示孩子,tag为1表示线索 }treenode,*tree;先建立一个二叉树//使用先序建立二叉树vo原创 2021-12-02 11:01:18 · 1403 阅读 · 0 评论 -
树与二叉树——左右子树交换
题目:将树所有节点的左、右子树交换。并输出交换后的先序列。思路:使用递归 需要的辅助参数 treenode *p;子树交换 p = t->rchild; t->rchild = t->lchild; t->lchild = p;对左右子树进行递归。测试用例:ABD##E##CF##G## 结果 :ACGFBED代码实现:#include <iostream>using namespace std;#define MAX 20typ原创 2021-09-19 21:31:39 · 394 阅读 · 0 评论 -
树与二叉树——计算二叉树的双分支结点个数
题目:计算一棵给定二叉树的所有双分支结点个数。递归:思路:定义一个参数 int ans = 0;若当前结点有左孩子和右孩子则ans+1;若存在左孩子 则左孩子执行 1,2步骤;若存在右孩子则右孩子执行1,2步骤;测试用例:ABD##E##DF##G## 结果:3ABD###CE##F## 结果:2代码实现:#include <iostream>using namespace std;#define Max 20typedef struct原创 2021-09-19 16:15:29 · 5073 阅读 · 0 评论 -
树与二叉树——判断是否为完全二叉树
题目:判断二叉树是否为完全二叉树。思路:设置一个辅助队列q , 一个结果参数ans,和一个辅助参数flag(用于记录是否有缺孩子结点。若根节点没用左右孩子则设置ans为true。结点入队,判断队列是否为空 若不为空则出队。判断出队结点是否有左孩子,若没有左孩子则判断是否有右孩子,若有右孩子, 则设置ans = true;若有左孩子,则判断之前有没有缺孩子节点,若有则记录ans = false若不存在缺孩子结点,则左孩子入队,判断右孩子是否存在,若存在右孩子入队 ,不存在 设置flag原创 2021-09-18 20:41:42 · 183 阅读 · 0 评论 -
树与二叉树——非递归算法求二叉树高度
题目:假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树高度。参数:辅助队 q(存储节点);1对位标记参数L(用来记录当前一层队尾所在位置);指针P(用来指向出队元素);记录高度参数 dept(记录当前高度);步骤:参数初始化 L=0,deot=0;将结点放入队列q中,判断当前结点是否有孩子结点,有则将孩子结点放入队列q中判断L是否等于队头指针,若等于则dept+1判断队头指针是否小于队尾指针,若小于则继续进行循环,若不小于则循环结束返回当前dept值;代码实现:#incl原创 2021-09-18 17:29:33 · 1694 阅读 · 0 评论 -
属于二叉树——根据先序遍历和中序遍历建立二叉树
题目: 根据先序遍历和中序遍历建立二叉树的二叉链表 并输出后序序列思路:根据先序序列确定根节点在中序序列中找到根节点,将中序序列分成两段,前半段为根节点的左子树的中序序列,后半段为右子树的中序序列递归直到每颗子树只有一个结点。示例: A / \ B C 先序序列:'A','B','D','E','C','F' / \ / 中序序列:'D','B','E','A','F','C' D E F //原创 2021-09-18 17:24:16 · 754 阅读 · 0 评论 -
图的存储——邻接矩阵法(c++实现)
定义:表示顶点之间相邻关系的矩阵设G(V,E)是具有n个结点的图,则G得邻接矩阵是具有如下性质的方阵:算法思想:输入总顶点数和总边数。依次输入点的信息存入顶点表中。初始化邻接矩阵,使每个权值初始化为极大值。构造邻接矩阵。优点:便于判断两个顶点之间是否有边;便于计算各个顶点的度;缺点:不便于增加和删除顶点;不便于统计边的数目;空间复杂度高;代码实现://使用邻接矩阵存储#include <iostream>#include <iomanip>原创 2021-09-16 20:26:52 · 2207 阅读 · 1 评论 -
树与二叉树——后序遍历二叉树的非递归算法
算法思想:后序非递归遍历二叉树是先访问左子树,再访问右子树,最后访问根节点。 ①若根节点有左孩子,则左孩子以此入栈,直到左孩子为空,然后读取栈顶元素,若其右孩子不为空且未被访问过,则对右子树执行①。否则栈顶元素出栈并访问。例:对上图进行后序遍历。代码:#include <bits/stdc++.h>using namespace std;typedef struct TreeNode{ char data; struct TreeNode *lchild,*rch原创 2021-09-15 07:51:52 · 770 阅读 · 0 评论 -
树与二叉树——二叉树寻找公共祖先
树与二叉树——二叉树寻找公共祖先题目:已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近公共祖先节点的值。思路:使用数组存储二叉树空缺位置使用-1表示 如 {-1,1,2,3,-1,4,-1,5,-1,-1,6,-1};有二叉树性质得出 节点的双亲结点为结点编号/2向下取整如i的双亲结点编号为i/2 j的双亲结点编号为j/2若 i>j 说明i的层次大于或等于j所在层次 则进行 i/=2 然后在进行比较**若i<j 说明j的原创 2021-09-15 07:49:40 · 422 阅读 · 0 评论