数据-结构
gilr
梅花香自苦寒来,
展开
-
链表面试题/逆置/反转单链表+查找单链表的倒数第k个节点
一、逆置/反转单链表 逆置一个单链表和从尾到头打印不一样,打印不改变节点的位置,只是将数据反着打印一遍,而逆置就是要改变节点的位置。 可以先创建一个空节点,然后从第一个开始每次在单链表上拿一个节点,前插给创建的节点,单链表的头结点往后移,创建的新节点往前移。当单链表为空的时候,也就逆置完了。 这里面我们需要三个指针分别是cur,用来顺序遍历整个链表,nextNode指针用来保存逆置的头结原创 2017-07-15 16:41:49 · 755 阅读 · 0 评论 -
数据结构面试题/判断一棵二叉树是否是平衡二叉树
AVL树概念:如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有N个结点,其高度可保持在O(lgn),平均搜索时间复杂度O(lg(n)). 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1.它的左右子树都是AVL树; 2.左子树和右子树高度之差(简称平衡因子)的绝对值不超过1. 先定义一个二叉树的结构体:template<class K, class V> //键值队原创 2017-07-27 23:24:10 · 654 阅读 · 0 评论 -
数据结构面试题/求一棵二叉树的镜像
求树的镜像的过程其实是在遍历树的同时交换非叶节点的左右子节点。 二叉树的节点定义如下:struct BinaryTreeNode //创建树中的每个结点{ BinaryTreeNode(const T& data) :_data(data) ,_pLeft(NULL) ,_pRight(NULL) {} T _data原创 2017-07-27 12:18:58 · 320 阅读 · 0 评论 -
数据结构面试题/求二叉树的高度/销毁一棵二叉树-->
template<class T>struct BinaryTreeNode //创建树中的每个结点{ BinaryTreeNode(const T& data) :_data(data) ,_pLeft(NULL) ,_pRight(NULL) {} T _data; //结点的值 BinaryTreeNode<原创 2017-07-23 12:43:49 · 538 阅读 · 0 评论 -
数据结构面试题/求二叉树叶子节点的个数/求二叉树第k层的节点个数
题目:求二叉树叶子节点的个数/求二叉树第k层的节点个数 二叉树如图所示: #pragma once#include<stdlib.h>#include<queue>#include<stack>#include<iostream>using namespace std;template<class T>struct BinaryTreeNode //创建树中的每个结点{原创 2017-07-23 12:25:17 · 1449 阅读 · 0 评论 -
数据结构面试题/实现一颗二叉树的层序遍历
题目:实现一颗二叉树的层序遍历 一、二叉树(Binary Tree)的定义: 二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树,(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。 二、二叉树的性质: 1、在二叉树的第i层上至多有2^(i-1)个结点(i>=1); 2、深度为k的二叉树至多有2^k - 1个结点,(k>=1); 3、对任何一棵二叉原创 2017-07-22 11:54:18 · 660 阅读 · 0 评论 -
将二叉搜索树转换成一个排序的双向链表
题目:将二叉搜索树转换成一个排序的双向链表。提示:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。–中序线索化的变型。 1、由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍历算法的特点就是从小到大访问结点。当遍历访问到根结点时,假设根结点的左侧已经处理好,只需将根结点与上次访问的最近结点(左子树中最大值结点)的指针连接好即可。进而原创 2017-07-30 18:31:41 · 478 阅读 · 0 评论 -
数据结构面试题/判断一棵树是否是完全二叉树
二叉树: 1.满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上。 2.完全二叉树:如果一棵具有N个结点的二叉树的结构与满二叉树的前N个结点的结构相同,称为完全二叉树。 //判断一棵二叉树是否是完全二叉树--利用层序遍历来处理->关键:找第一个度不为2的结点->后序结点:如果有孩子则不是完全二叉树,否则是 bool IsCompleteBin原创 2017-07-29 20:09:52 · 5568 阅读 · 0 评论 -
链表面试题3/链表带环问题--判断链表是否带环?
求单链表是否存在环,环长,带环链表长 给定一个单链表,只给出头指针h: 1、如何判断是否存在环? 2、如何知道环的长度? 3、如何找出环的连接点在哪里? 4、带环链表的长度是多少? 解法: 1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。 2、对于问题2,记录下问题1的碰原创 2017-07-17 10:58:46 · 379 阅读 · 0 评论 -
数据结构面试题/元素出栈,入栈顺序的合法性
题目:元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 栈(stack)——是限定在表尾进行插入或删除操作的线性表,又称为先进后出的线性表。 定义一个栈s, 入栈序列为stack_in, 出栈序列为stack_out,长度分别为len_in 和len_out原创 2017-07-20 15:30:39 · 614 阅读 · 0 评论 -
数据结构/实现二叉树的前序/中序/后序非递归遍历
//先序遍历--非递归版本 //1.取当前结点--访问结点--出栈 //2.保存右子树 //3.保存左子树 void PreOrder_Nor() { cout << "PreOrder_Nor: " << endl; if (NULL == _pRoot) return; stack<N原创 2017-07-29 10:01:20 · 401 阅读 · 0 评论