-
2020-12-23 18:51:02
/* 初始化表格*/ var TableInit = function () { var oTableInit = {}; //初始化Table oTableInit.Init = function (table,url,columns) { table.bootstrapTable($.extend({}, tableDefaults, { queryParams: queryParams,//参数 responseHandler: responseHandler, async: true, url: url, height: '100%', showHeader: 'false', columns: columns, onLoadSuccess(data){ console.log(data.rows) listTotal = data.total; } })); }; return oTableInit; }; $(function(){ var oTable = new TableInit(); oTable.Init($('#libList1'),'/project/getProjectList',column.columns1); var oTable1 = new TableInit(); oTable1.Init($('#libList2'),'/project/getProjectList',column.columns2); }) ###### 更新: $.extend({},defaults, options) 这样做的目的是为了保护包默认参数。也就是defaults里面的参数。 做法是将一个新的空对象({})做为$.extend的第一个参数,defaults和用户传递的参数对象紧随其后,这样做的好处是所有值被合并到这个空对象上,保护了插件里面的默认值。
更多相关内容 -
试按表(12.8.9.20.10.5.6.15.19.25)中元素的排列次序,将所有元素插入一个空的二叉排序树中
2020-09-12 20:40:25试按表(12.8.9.20.10.5.6.15.19.25)中元素的排列次序,将所以元素插入一个初始为空的二叉排序树中,使之仍是一颗二叉排序树。试画出插入完成之后的二叉排序树。 结果 解题方法:以第一个元素为根节点,接下来每个...试按表(12.8.9.20.10.5.6.15.19.25)中元素的排列次序,将所以元素插入一个初始为空的二叉排序树中,使之仍是一颗二叉排序树。试画出插入完成之后的二叉排序树。
结果
解题方法:以第一个元素为根节点,接下来每个元素与根节点比较,小于根节点的去左子树,大于根节点的去右子树
步骤图:
-
二叉树的初始化
2015-03-12 16:26:52给定二叉树的初始化数据,怎样动态建立一个二叉树呢? 比如我们给定这样的一组数据:{ 1, 2, 3, 4, 0, 5, 6, 0, 7 }(假设0代表空),则我们构建的二叉树是这样的: 1 / \ 2 3 / / \ 4 5 6 \ 7 思路分析: ...问题:
给定二叉树的初始化数据,怎样动态建立一个二叉树呢?
比如我们给定这样的一组数据:{ 1, 2, 3, 4, 0, 5, 6, 0, 7 }(假设0代表空),则我们构建的二叉树是这样的:
1 / \ 2 3 / / \ 4 5 6 \ 7
思路分析:
我们可以使用一个队列,队首出一个元素,队未进两个元素,而这两个元素正好是这个队首元素的左右节点。
参考代码如下:
TreeNode* initBTree(int elements[], int size) { if (size < 1) { return NULL; } //动态申请size大小的指针数组 TreeNode **nodes = new TreeNode*[size]; //将int数据转换为TreeNode节点 for (int i = 0; i < size; i++) { if (elements[i] == 0) { nodes[i] = NULL; } else { nodes[i] = new TreeNode(elements[i]); } } queue<TreeNode*> nodeQueue; nodeQueue.push(nodes[0]); TreeNode *node; int index = 1; while (index < size) { node = nodeQueue.front(); nodeQueue.pop(); nodeQueue.push(nodes[index++]); node->left = nodeQueue.back(); nodeQueue.push(nodes[index++]); node->right = nodeQueue.back(); } return nodes[0]; }
下面是一个测试代码,我们可以看看结果:
头文件声明(tree.h):
#pragma once #include <iostream> #include <vector> #include <queue> using namespace std; //Definition for binary tree struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; //初始化一个二叉树 TreeNode* initBTree(int elements[], int size); //树的前序遍历 void preOrder(TreeNode *root, vector<int> &result); //树的中序遍历 void inOrder(TreeNode *root, vector<int> &result); //树的后序遍历 void postOrder(TreeNode *root, vector<int> &result); //vector的遍历 void traverse(vector<int> nums);
源代码实现:#include "tree.h" TreeNode* initBTree(int elements[], int size) { if (size < 1) { return NULL; } //动态申请size大小的指针数组 TreeNode **nodes = new TreeNode*[size]; //将int数据转换为TreeNode节点 for (int i = 0; i < size; i++) { if (elements[i] == 0) { nodes[i] = NULL; } else { nodes[i] = new TreeNode(elements[i]); } } queue<TreeNode*> nodeQueue; nodeQueue.push(nodes[0]); TreeNode *node; int index = 1; while (index < size) { node = nodeQueue.front(); nodeQueue.pop(); nodeQueue.push(nodes[index++]); node->left = nodeQueue.back(); nodeQueue.push(nodes[index++]); node->right = nodeQueue.back(); } return nodes[0]; } void preOrder(TreeNode *root, vector<int> &result) { if (root) { result.push_back(root->val); preOrder(root->left, result); preOrder(root->right, result); } } void inOrder(TreeNode *root, vector<int> &result) { if (root) { inOrder(root->left, result); result.push_back(root->val); inOrder(root->right, result); } } void postOrder(TreeNode *root, vector<int> &result) { if (root) { postOrder(root->left, result); postOrder(root->right, result); result.push_back(root->val); } } void traverse(vector<int> nums) { vector<int>::size_type size = nums.size(); for (size_t i = 0; i < size; i++) { cout << nums[i] << ' '; } cout << endl; } int main() { int nums[] = { 1, 2, 3, 4, 0, 5, 6, 0, 7 }; TreeNode *root = initBTree(nums, 9); vector<int> preResult; vector<int> inResult; vector<int> postResult; preOrder(root, preResult); inOrder(root, inResult); postOrder(root, postResult); cout << "前序遍历的结果:" << '\n'; traverse(preResult); cout << "中序遍历的结果:" << '\n'; traverse(inResult); cout << "后序遍历的结果:" << '\n'; traverse(postResult); return 0; }
运行结果如下:
-
数据结构——平衡二叉树PTA习题(很多不会的,求大佬帮忙写题解)
2020-12-18 11:03:01文章目录单选题选择题题解编程题7-3 插入排序还是堆排序 (25分) 不会输入格式:输出格式:输入样例 1:输出样例 1:输入样例 2...在下列所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关文章目录
单选题
题号 题目 答案 1 AVL树是一种平衡的二叉搜索树,树中任一结点具有下列哪一特性: 左、右子树高度差的绝对值不超过1 2 C 3 在下列所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是: 24、53 4 12个结点的AVL树的最大深度是? 5 5 若AVL树的深度是6(空树的深度定义为-1),则该树的最少结点数是: 33 6 将 8, 9, 7, 2, 3, 5, 6, 4 顺序插入一棵初始为空的AVL树。下列句子中哪句是错的? C 7 将一系列数字顺序一个个插入一棵初始为空的AVL树。下面哪个系列的第一次旋转是“右-左”双旋? D 8 将 1, 2, 3, 6, 5, 4 顺序一个个插入一棵初始为空的AVL树,会经历下列哪些旋转? 一个“右-右”旋和两个“右-左”旋 9 A 10 首先将 28, 23, 54, 61, 98, 37 插入一棵初始为空的平衡二叉树(AVL树),然后马上插入下列选项中的一个键值。哪个键值将引起 RL 旋转? 70 选择题题解
2、如图所示
3、转的过程:- 插入48之后属于右左双旋转的情况,按照图示的方法先做右单旋转,再做左单旋转
- 右单旋转:以37为轴,53顺时针旋转(向下),原本是37左孩子的48成为53的左孩子
- 24的右孩子由53变为37
- 左单旋转:仍然以37为轴,24逆时针旋转(向下),成为37的左孩子
24的左子树高度为1,右字数高度为3,属于RL型,RL型的变化就这么做的,具体RL型解释如下
具体的RL型的旋转规则,大佬说记住就可以了,哎拼命记吧。
从第四题之后都暂时不会,望各位大佬留言赐教,补充题解
编程题
7-3 插入排序还是堆排序 (25分) 不会
根据维基百科的定义:
插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。
堆排序也是将输入分为有序和无序两部分,迭代地从无序部分找出最大元素放入有序部分。它利用了大根堆的堆顶元素最大这一特征,使得在当前无序区中选取最大元素变得简单。
现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?
输入格式:
输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。
输出格式:
首先在第 1 行中输出Insertion Sort表示插入排序、或Heap Sort表示堆排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。
输入样例 1:
10 3 1 2 8 7 5 9 4 6 0 1 2 3 7 8 5 9 4 6 0
输出样例 1:
Insertion Sort 1 2 3 5 7 8 9 4 6 0
输入样例 2:
10 3 1 2 8 7 5 9 4 6 0 6 4 5 1 0 3 2 7 8 9
输出样例 2:
Heap Sort 5 4 3 1 0 2 6 7 8 9
代码
#include<bits/stdc++.h> using namespace std; # define ll long long # define inf 0x3f3f3f3f const int maxn = 2e4+100; int a[maxn]; int b[maxn]; void cal(int l,int r){ int i=l,j=i*2; while(j<=r){ if(j+1<=r&&b[j]<b[j+1]) j++; if(b[j]>b[i]){ swap(b[i],b[j]); i=j; j=i*2; } else break; } } int main() { int n; scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } for(int i=1; i<=n; i++) { scanf("%d",&b[i]); } int flag=-1; int i; for( i=1; i<=n; i++) { if(i==1) continue; else if(b[i]>=b[i-1]) continue; else { flag=i; break; } } if(flag!=2) { sort(b+1,b+flag+1); printf("Insertion Sort\n"); for(int i=1; i<=n; i++) { if(i==1) printf("%d",b[i]); else printf(" %d",b[i]); } printf("\n"); } else { printf("Heap Sort\n"); int pos=n; while(pos>=2&&b[pos]>b[pos-1]) pos--; swap(b[1],b[pos]); cal(1,pos-1); for(int i=1; i<=n; i++) { if(i==1) printf("%d",b[i]); else printf(" %d",b[i]); } printf("\n"); } return 0; }
7-4 愿天下有情人都是失散多年的兄妹 (25分)
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?
输入格式:
输入第一行给出一个正整数N(2 ≤ N ≤104 ),随后N行,每行按以下格式给出一个人的信息:
本人ID 性别 父亲ID 母亲ID
其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。
接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。
注意:题目保证两个人是同辈,每人只有一个性别,并且血缘关系网中没有乱伦或隔辈成婚的情况。
输出格式:
对每一对有情人,判断他们的关系是否可以通婚:如果两人是同性,输出
Never Mind
;如果是异性并且关系出了五服,输出Yes
;如果异性关系未出五服,输出No
。输入样例:
24 00001 M 01111 -1 00002 F 02222 03333 00003 M 02222 03333 00004 F 04444 03333 00005 M 04444 05555 00006 F 04444 05555 00007 F 06666 07777 00008 M 06666 07777 00009 M 00001 00002 00010 M 00003 00006 00011 F 00005 00007 00012 F 00008 08888 00013 F 00009 00011 00014 M 00010 09999 00015 M 00010 09999 00016 M 10000 00012 00017 F -1 00012 00018 F 11000 00013 00019 F 11100 00018 00020 F 00015 11110 00021 M 11100 00020 00022 M 00016 -1 00023 M 10012 00017 00024 M 00022 10013 9 00021 00024 00019 00024 00011 00012 00022 00018 00001 00004 00013 00016 00017 00015 00019 00021 00010 00011
输出样例:
Never Mind Yes Never Mind No Yes No Yes No No
代码
#include<iostream> #include<cstring> #include<vector> using namespace std; const int Inf = 1e5 + 5; vector<int> vec[Inf]; // 存关系图 bool vis[Inf]; // 标记五服以内的亲属 char sex[Inf]; // 记录性别 bool flag; // 标记情侣是否为近亲 void Dfs(int x, int num) // num表示第几代,从0开始 { if (num >= 4) // 超过五代直接退出 return; for (int i = 0; i < vec[x].size(); i++) { if (!vis[vec[x][i]]) { vis[vec[x][i]] = 1; // 标记出现的人 Dfs(vec[x][i], num + 1); } else flag = 1; //五服之内出现一样的人 } } int main() { int T; cin >> T; while (T--) { int t, fa, ma; char ch; scanf("%d ", &t); sex[t] = getchar(); scanf(" %d %d", &fa, &ma); if (fa != -1) // -1不用保存,避免数据处理不当导致数组越界 { vec[t].push_back(fa); // 保存双亲 sex[fa] = 'M'; // 记录父亲性别 } if (ma != -1) { vec[t].push_back(ma); sex[ma] = 'F'; } } cin >> T; while (T--) { int x, y; scanf("%d %d", &x, &y); if (sex[x] == sex[y]) // 同性 cout << "Never Mind" << endl; else { memset(vis, 0, sizeof(vis)); // 每次都初始化一下,每个人的五服亲戚不一样 vis[x] = 1; vis[y] = 1; flag = 0; Dfs(x, 0); Dfs(y, 0); if (flag) // 被标记过说明这两人为近亲 cout << "No" << endl; else cout << "Yes" << endl; } } return 0; }
-
2022年考研数据结构_5 树
2020-12-28 16:40:36树5.1 概念5.2 二叉树5.2.1 树的定义和特征深度5.2.2 树的遍历1) 给出中后,输出前序5.3 树,森林5.3.1 树的存储结构5.3.2 森林与二叉树的转换1) 树转换为二叉树2) 森林转换为二叉树3) 二叉树转换为树4) 二叉树转换... -
二叉树 - 数据结构与算法教程 - C语言网
2021-05-25 00:55:03=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。如图如图,每一个结点中最多拥有一个左结点和一个右结点,并没有多余的结点,这是... -
前序遍历和中序遍历唯一确定一颗二叉树
2018-11-29 23:46:00如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一颗二叉树。 基本要求 已知一棵二叉树的前序序列和中序序列,试设计完成下列任务的一个算法: (1).构造一颗二叉树 (2).证明构造正确(即分拨... -
Git 菜鸟变大神 (一) 本地仓库的创建和初始化
2015-10-27 18:33:15Git是什么? Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。...如果说为什么要选择Git,可以说因为Git高端大气上档次,实现了免费开源易用的版本控制功能,并有 -
关于AVL(二叉平衡树)的插入讲解,很简单
2018-12-12 00:21:16AVL又称二叉平衡树,是会自平衡的二叉搜索树,左孩子比自己小,右孩子比自己大,关键在于他的每一个节点左右孩子高度差绝对值不会超过1 实际上我上网查了好几次AVL的详解,关于里面怎么平衡,单左,单右,左右双旋... -
超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
2021-04-11 01:11:23本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧? -
属性赋初始值的四种写法--C#6.0新特性
2018-10-25 16:32:40在C# 6.0 语法出来前,属性的赋初始值使用get;set;虽然已经相对于最原始的写法简洁了非常多,但是还不够,还不够,还不够。。。今天刚好一直在想着前几天朋友问我的有关属性赋初始值的问题,便自己试了一下,... -
二叉搜索树的初始化、插入、删除、查找、销毁等操作
2018-09-15 14:41:00二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有结点的值都小于根结点的值 若它的右子树不为空,则右子树上所有结点的值都大于根结点的值 它的... -
C语言扫雷游戏之:初始化雷的分布
2022-03-30 16:36:57在雷区当中,一格既可能是数字(表达周边的总雷数),也可能它就是一颗雷,还有可能它是一个空位。那么我做如下约定: 0:表示空位 数字1-8:表示这一格周边的总雷数(以9宫格为区域,最多存在8颗雷) 数字9:... -
用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
2017-11-08 08:50:49用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。 先上代码#include #include /*(1)创建一颗二叉树 ,用递归方法实现对其进行先序、 中序和后序遍历的操作 */ //创建二叉树结构体 ... -
error C4700: 使用了未初始化的局部变量“p”
2021-11-30 22:11:34因为浪费空间,遍历时需要叶子节点左右都为NULL, 中序遍历可以节约节点空间 typedef char ElemType; //线索存储标志位 //Link(0)表示指向左右孩子的指针 //Thread(1)表示指向前驱后继的线索 typedef enum{... -
二叉查找树 各种操作及其初始化
2013-10-27 09:02:381、序 详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的... 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上 -
PTA 7-1 是否完全二叉搜索树 (30分)
2020-04-29 14:55:15将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。 输入格式: 输入第一行给出一个不超过20的正整数N;... -
第九章查找表-二叉排序树-计算机17级(期末复习带详解版)
2018-11-25 11:08:28解析在后面: 2-5写错了,选D 解析: x2-1: 要注意这个二叉搜索树还是个完全二叉树,只有二叉树时最大值才一定在叶结点上,且中位值一定要注意,肯定是在根结点或根的左子树上 x2-2:之前就做过,画... -
超硬核!数据结构学霸笔记,考试面试吹牛就靠它
2021-03-26 11:11:21(作为函数参数时不需要初始化) 在声明一个引用后,不能再作为另一变量的引用。 3。不能建立引用数组。 1.2函数调用: 其实还是通过函数来理解了一下引用 void Myswap1(int a,int b) { int c = a; a = b; b = c;... -
圣诞节快乐,教你用shell脚本实现一颗圣诞树。【小酷炫】
2021-12-22 22:23:31用shell实现一个酷炫的圣诞树! -
树与二叉树——平衡二叉树的构造问题及其实际问题
2019-04-13 20:03:15若将关键字1,2,3,4,5,6,7 依次插入到初始为空的平衡二叉树 T 中,则 T 中平衡因子为 0 的分支结点的个数是( )。 从图中可以知道,平衡因子为0的结点有:4,2,6 共三个。 这个题目其实考的就是如何... -
二叉树空指针个数的理解
2020-11-08 12:58:24二叉树在使用链式存储时,每一个结点都有一个指针,或者为空或者指向子结点。 空指针的个数为n+1是众所周知的事,虽然不论哪种证明方法都仅仅是恒等式变形的结果,但去分析等式两边的意义是十分有助于理解关系本质... -
如何用Qt绘制一颗好看的二叉树
2018-10-29 23:32:04最近在学习数据结构二叉树,通过在C++控制台界面已实现了二叉树的前序创建,层次创建和前序加中序确定一颗二叉树三种创建方式。那么问题就来了,一颗已经创建好的二叉树,如何能以图形化的界面显示出来呢? ... -
求一颗二叉排序树查找成功和失败情况下的平均查找长度
2019-02-13 15:33:18* 求一颗二叉排序树查找成功和失败情况下的平均查找长度 * 实验目的: * 掌握二叉排序树的查找过程及其算法设计 * 实验内容: * 设计程序,对于给定的关键字序列,构造一颗二叉排序树bt, * 并求bt在查找成功和失败... -
如何写一颗二叉树(递归)【菜鸟学习日记】
2017-12-26 21:36:38老规矩,开篇点题,今天写了二叉树,整理总结一下要写二叉树,先画出一颗来 二叉树我是用链表来实现的1、每一个节点包含数据,左指针和右指针,分别指向左孩子和右孩子//创建节点类型 //节点中有数据,有指针 ... -
7-2 是否完全二叉搜索树 (30 分)第九章查找表-二叉排序树-计算机17级
2018-11-27 21:18:19将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。 输入格式: 输入第一行给出一个不超过20的正整数N... -
二叉树 习题集一
2018-10-05 23:26:13二叉树 习题集一 1、若要惟一地确定一棵二叉树,只需知道该二叉树的(D) A.前序序列 B....C....D....有两种情况不能确定一棵树: (1)只知道先序序列或只...二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有以... -
平衡二叉树(AVL)的4种插入调整过程
2019-07-10 22:06:54在插入中为了保证二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树的高度差的绝对数值不超过1,这样的二叉树被称为平衡二叉树(Balanced Binary Tree),简称平衡树(AVL)。 平衡二叉树的... -
倾斜摄影中镜头畸变对空三建模的影响
2019-06-25 11:27:52之前为大家介绍了一些倾斜摄影相机背后的技术(可以翻看我的第一篇文章),文章分析了倾斜摄影作业流程的痛点,解释了为什么光学镜头还会影响到软件的空三建模,最后是通过什么技术手段去解决这个问题。本期我们再来... -
为实习准备的数据结构(11)-- 图论算法 集锦
2021-02-15 13:51:30文章目录讲个故事图的相关定义定义一:有向图、无向图、权重、活用图定义二:完全图、连通图、连通分量、生成树定义三:邻接表、邻接矩阵定义四:DFS、BFS定义五:Prim 算法、Kruskal 算法、Dijkstra 算法存储结构...