欢迎来到天天文库
浏览记录
ID:11378035
大小:59.22 KB
页数:58页
时间:2018-07-11
《微软面试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:
此文档下载收益归作者所有