关闭

微软系列面试题c/c++第一题双向链表

标签: 双向链表微软面试
733人阅读 评论(0) 收藏 举报
分类:

先写的别的,近来学习算法和数据结构,有许多不懂的地方,借助代码提高一下自己的能力。在此,做个计划,每两天写一篇博客,解决一道微软面试题。打算一年之内完成系列博客的更新。也请大家多多探讨。也算是对自己的一个贵在坚持的锻炼。

第一道题是把二元查找树转变成排序的双向链表。

在数据结构中,二元查找树是树的左子树比根节点小,右子树比根节点大。每一颗子树也是二元查找树。二元查找树的中序遍历是升序的。

/*

  Problem_1.cpp
  author:B11040805
*/

#include<stdio.h>
struct BSTreeNode{
	int value;
	struct BSTreeNode *pLeft,*pRight;
	BSTreeNode(){
	pLeft=pRight=NULL;
	}
};
BSTreeNode *head=NULL,*tail=NULL;

void createList(BSTreeNode *cur){
	cur->pLeft=tail;
	if(tail!=NULL){
		tail->pRight=cur;
	}else{
		head=cur;
	}
	tail=cur;
}



BSTreeNode* visit(BSTreeNode *root)
{
	if(root!=NULL){
		visit(root->pLeft);
		createList(root);
		visit(root->pRight);
	}
	return root;
}

void addNode(BSTreeNode **root,int value){
	BSTreeNode *p;
	if(NULL!=*root)
	{
		if(value>(*root)->value){
			addNode(&((*root)->pRight),value);
		}else if(value<(*root)->value){
			addNode(&((*root)->pLeft),value);
		}else{
			printf("error");
		}
	}else{
		p=new BSTreeNode();
		p->value=value;
		*root=p;
	}
}

int main(){
	BSTreeNode *root=NULL;
	int data[]={10,6,14,4,8,12,16};
	for(int i=0;i<7;i++)
	{
		addNode(&root,data[i]);
	}
	visit(root);
	while(tail!=NULL){
		printf("%d  ",tail->value);
		tail=tail->pLeft;
	}
	printf("\n");
	while(head!=NULL){
		printf("%d  ",head->value);
		head=head->pRight;
	}
	return 0;
}


0
0
查看评论

C/C++ 微软面试题 -链表

链表的结点结构 struct Node { int data ; Node *next ; }; typedef struct Node Node ; (1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) Node * ReverseList(Node *head)...
  • u010236550
  • u010236550
  • 2014-02-18 14:28
  • 1890

leetcode部分题目(C++)

2016.3.19 88. Merge Sorted Array(从尾到头) MySubmissions Question TotalAccepted: 92780 Total Submissions: 310153 Difficulty: ...
  • yuxin6866
  • yuxin6866
  • 2016-07-30 23:01
  • 322

【剑指Offer】二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。算法描述使用递归,分别去将当前节点的左右子树变成双向链表,然后获取左边链表的最后一个元素,当前元素的左指针指向它,它的右指针指向当前元素;右边链表的第一个元素,它的左指针指向当前...
  • zgljl2012
  • zgljl2012
  • 2015-09-19 02:11
  • 1853

2016阿里巴巴c/c++研发工程师在线笔试题(附加题)(题目写的很乱,纯属碎片)

1. 写一个二叉树,第一个数据满足二叉搜索树性质;第二个数字满足最大堆性质,且数字不一样。(图是自己构造的)结构:struct pair_t { int a; int b; }; struct node_t { int a,b; node_t *left,*right...
  • Brain011
  • Brain011
  • 2015-08-23 14:47
  • 1519

面试题27:二叉搜索树和双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点的指针的指向。        开始没什么思路。但是想到二叉树的所有题目几乎都可以用递归来做。就想到先找根节点。考虑根节点的左边,根节点肯定是连接左子树...
  • hyp1977
  • hyp1977
  • 2016-07-04 19:39
  • 125

leetcode1题 题解 翻译 C语言版 Python版

1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that...
  • yingzinanfei
  • yingzinanfei
  • 2016-11-08 17:30
  • 585

<C/C++数据结构>双向链表(C++模板实现)

参考资源: http://zh.wikipedia.org/wiki/双向链表 《百度文库》 《算法导论》 http://blog.sina.com.cn/s/blog_77795cad01011ud1.html 注: 本文部分文字学习并copy自网络. 如果侵犯了您的版权,请联系本人tangyi...
  • EbowTang
  • EbowTang
  • 2015-01-30 11:06
  • 1245

C++ prime plus 第六版 8.8-4

//本程序参考http://blog.csdn.net/qq844352155/article/details/23362951并加以适当的修改,感谢原作者 #include #include using namespace std;struct stringy{ char * str; in...
  • liyabin19900829
  • liyabin19900829
  • 2014-12-12 20:59
  • 326

剑指Offer第一题

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:从数值中间开始查找,根据题意,二维数组的左上角是最小值,二维数组的右下角是最大值,从中间数值查找是最节约时间的,可以从左...
  • zorony
  • zorony
  • 2017-01-04 14:31
  • 157

剑指offer第1题

Q:在一个二维数组中,每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增排序。完整一个函数,输入这样二维数组和一个整数,判断数组中是否含这个整数。 思路一: /*  矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,* 因此从左下角开始查找,当要查找数字比左下角数字大时。...
  • wangdd_199326
  • wangdd_199326
  • 2017-06-16 13:41
  • 122
    个人资料
    • 访问:53259次
    • 积分:962
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:25篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论