微软面试100题系列.doc

微软面试100题系列.doc

ID:11378035

大小:59.22 KB

页数:58页

时间:2018-07-11

微软面试100题系列.doc_第1页
微软面试100题系列.doc_第2页
微软面试100题系列.doc_第3页
微软面试100题系列.doc_第4页
微软面试100题系列.doc_第5页
资源描述:

《微软面试100题系列.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、微软面试100题系列1.把二元查找树转变成排序的双向链表 题目:   输入一棵二元查找树,将该转换成个排序的双向链表。 要求不能创建任何新的结点,只调整指针向。 10 / 614 // 481216 转换成双向链表 4=6=8=10=12=14=16   首先我们定义的二元查找树节点的数据结构如下:   viewplaincopystructBSTreeNode {   intm_nValue;//valueofnode   BSTree疲Node*m_pLef西t;//leftchi肆ldofnode   B烧STreeNode*m讹_pRi

2、ght;//r奄ightchildof驴node }; 解答:   砸这是一个可以使用递归的希传统问题。显然可以使用吻中序遍历(左-根-右)挺。按照这个方式遍历树,栋比较小的结点先访问。如寨果我们每访问一个结点,许假设之前访问过的结点已谐经调整成一个排序双向链影表,我们再把调整当前结腰点的指针将其链接到链表鞠的末尾。当所有结点都访踩问过之后,整棵树也就转终换成一个排序双向链表了看。   viewplai侨ncopyBSTree诚Node*pHead=曳NULL;   BSTr宿eeNode*pLis惺tIndex=NULL钵; //遍历二元查找

3、树中窑序   voidergo选dicBSTree(B站STreeNode*p敛Current) { if鱼(NULL==pCur琶rent){ retur埔n; }   if(NUL弗L!=pCurrent秋->m_pLeft){邀   ergodicBS抽Tree(pCurre烹nt->m_pLeft懦); } //节点接到链表泰尾部   convert弛ToDoubleLis刷t(pCurrent)融; //右子树为空   i估f(NULL!=pCu幕rrent->m_pR祟ight){   erg魂odicBSTree(觉pCurren

4、t->m郸_pRight); } }扔 //二叉树转换成lis熙t   voidconv挚ertToDouble庚List(BSTree索Node*pCurre汾nt) {   pCurr恕ent->m_pLef吞t=pListInde彤x;   if(NULL险!=pListInde来x){   pListI钮ndex->m_pRi嗡ght=pCurren腺t; }else{ pHe员ad=pCurrent逮; } pListInde些x=pCurrent;珐 cout }   2.设计呕包含min函数的栈。定辐义栈的数据结构,要求添掖加一个

5、min函数,能够挣得到栈的最小元素。要求剑函数min、push以铭及pop的时间复杂度都抚是O(1)。 ANSWE于R:   Stackis疗aLIFOdatast瞒ructure.Whe旋nsomeelemen轰tispoppedfr刑omthestack,该thestatuswi入llrecoverto弗theoriginal镁statusasbef缝orethatelem乓entwaspushe颁d.Sowecanre伏coverthemin援imumelement轴,too.   view陈plaincopy#d好efineSTACK_

6、岂LEN50 typede行fstruct { int忱val; intmin;燃 }stack_item庭; typedefstr势uct { stack_i右temdata; int鸳top; }stack;语   voidpush(盂stack*stk,i瞪ntval) { stk-滤>data.val=v妓al; if(stk->凡top>0) { if(v琐aldata.min)谋   //如果当前pus骄h进的元素小于栈中最小吕元素   stk->da擅ta.min=val;珊//把当前元素置为栈中暑最小元素 else //否蘸则,

7、不更新   stk-宦>data.min=s我tk->data.mi绣n; } else stk-溜>data.min=v棠al; } intpop(差stack*stk) {谐 returnstk->惺data.val; } i懦ntmin(stack阔*stk) { retur煮nstk->data.餐min; } 3.求子数组跪的最大和 题目: 输入一个圆整形数组,数组里有正数蛔也有负数。   数组中连懈续的一个或多个整数组成砒一个子数组,每个子数组缕都有一个和。   求所有赢子数组的和的最大值。要驹求时间复杂度为O(n)擞。   例如输

8、入的数组为耘1,-2,3,10,-蘸4,7,2,-5,和最势大的子数组为3,10,收-4,7,2, 因此输出榔为该子数组的和18。 A泄NSWER:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。