微软技术面试100题答案1.doc

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微软技术面试100题答案1,微软面试100题及答案,微软面试题及答案,c微软面试题及答案,技术面试问题及答案,面试问题及答案,公务员面试真题及答案,结构化面试试题及答案,php面试题及答案,java面试题大全带答案

微软技术面试100题第1-10题答案修正与优化 1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node }; Sorehead: 第一题: 基本就是采用一次遍历即可,楼主采用的是递归方法。 但有两个建议: 1、函数里面最好不好使用全局变量,采用参数传递的方式可能更好。全局变量能少用就少用。 2、if (NULL == pCurrent)这种方式我也不是很推荐。我知道采用这种方式的好处是一旦少写了一个等号,编译器会报错,NULL不是一个合法左值。其实我最开始写代码时也是这么写的,很长时间都觉得挺好。但这有个悖论,就是一个开发者能够想起来这么写的时候,这说明他知道这么是要做等值判断,自然也会知道该写==而不是=,想不起来的时候自然也就该犯错误还是犯错误,并不能起到原本初衷。代码写多了,会发现这么写真有点多此一举。 July 关于第一题,我再多说点: 我们可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表,我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后,整棵树也就转换成一个排序双向链表了。 view plaincopy to clipboardprint? // 遍历二元查找树 中序 void ergodicBSTree(BSTreeNode * pCurrent) { if (NULL == pCurrent) { return; } if (NULL != pCurrent-m_pLeft) { ergodicBSTree(pCurrent-m_pLeft); } // 节点接到链表尾部 convertToDoubleList(pCurrent); // 右子树为空 if (NULL != pCurrent-m_pRight) { ergodicBSTree(pCurrent-m_pRight); } } // 二叉树转换成list void convertToDoubleList(BSTreeNode * pCurrent) { pCurrent-m_pLeft = pListIndex; if (NULL != pListIndex) { pListIndex-m_pRight = pCurrent; } else { pHead = pCurrent; } pListIndex = pCurrent; coutpCurrent-m_nValueendl; } 或者网友何海涛所述: view plaincopy to clipboardprint? void ConvertNode(BSTreeNode* pNode, BSTreeNode* pLastNodeInList) { if(pNode == NULL) return; BSTreeNode *pCurrent = pNode; // Convert the left sub-tree if (pCurrent-m_pLeft != NULL) ConvertNode(pCurrent-m_pLeft, pLastNodeInList); // Put the current node into the double-linked list

文档评论(0)

xingkongwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档