<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦 > 創業指南 > 職場 > 面試題 > 程序員面試算法題

        程序員面試算法題

        時間: 護托1061 分享

        程序員面試算法題

          世界上第一位程序員是英國著名詩人拜倫的女兒AdaLovelace曾設計了巴貝奇分析機上解伯努利方程的一個程序。她甚至還建立了循環和子程序的概念。下面就由學習啦小編為大家介紹一下程序員面試算法題的文章,歡迎閱讀。

          程序員面試算法題篇1

          題目:輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只調整指針的指向。

          10

          / \

          6 14

          / \ /  \

          4 8 12   16

          轉換成雙向鏈表

          4=6=8=10=12=14=16。

          思路一:當我們到達某一個節點準備調整以該節點為根節點的子數時,先調整其左子樹將左子樹轉換成一個排好序的左子鏈表,再調整其右子樹轉換成右子鏈表。最近鏈接左子鏈表的最右節點、當前節點和右子鏈表的最左節點。從樹的根節點開始遞歸調整所有節點。

          思路二:我們可以中序遍歷整個樹。按照這個方式遍歷樹,比較小的節點優先訪問。如果我們每訪問一個節點,假設之前訪問過的節點已經調整為一個排序的雙向鏈表,我們再把調整當前節點的指針鏈接到鏈表的末尾。當所有的節點都訪問過之后,整棵樹也就轉換成一個排序的雙向鏈表了。

          參考代碼:

          二元查找樹的節點數據結構:

          structBSTreeNode{

          int value;

          BSTreeNode *m_left;

          BSTreeNode *m_right;

          }

          思路二對應的代碼:

          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

          pCurrent->m_pLeft = pLastNodeInList;

          if(pLastNodeInList != NULL)

          pLastNodeInList->m_pRight = pCurrent;

          pLastNodeInList = pCurrent;

          // Convert the right sub-tree

          if (pCurrent->m_pRight != NULL)

          ConvertNode(pCurrent->m_pRight, pLastNodeInList);

          }

          ///////////////////////////////////////////////////////////////////////

          // Covert a binary search tree into a sorted double-linked list

          // Input: pHeadOfTree - the head of tree

          // Output: the head of sorted double-linked list

          ///////////////////////////////////////////////////////////////////////

          BSTreeNode* Convert_Solution1(BSTreeNode* pHeadOfTree)

          {

          BSTreeNode *pLastNodeInList = NULL;

          ConvertNode(pHeadOfTree, pLastNodeInList);

          // Get the head of the double-linked list

          BSTreeNode *pHeadOfList = pLastNodeInList;

          while(pHeadOfList && pHeadOfList->m_pLeft)

          pHeadOfList = pHeadOfList->m_pLeft;

          return pHeadOfList;

          }

          程序員面試算法題篇2

          在數組中,數字減去它右邊的數字得到一個數對之差。求所有數對之差的最大值。例如在數組{2, 4, 1, 16, 7, 5, 11, 9}中,數對之差的最大值是11,是16減去5的結果。

          動態規劃法:

          double maxDif(vector v)

          { double max_dif = DBL_MIN;

          double loc_min = DBL_MAX;

          for(int i=v.size()-1;i>=0;i--) {

          if (v[i] < loc_min) loc_min = v[i];

          else if (v[i] - loc_min > max_dif) max_dif = v[i] - loc_min;

          }

          return max_dif; }

          程序員面試算法題篇3

          輸入一個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。打印出和與輸入整數相等的所有路徑。

          例如輸入整數22和如下二元樹

          10

          / \

          5 12

          / \

          4 7

          則打印出兩條路徑:10, 12和10, 5, 7。

          二元樹結點的數據結構定義為:

          struct BinaryTreeNode // a node in the binary tree

          {

          int m_nValue; // value of node

          BinaryTreeNode *m_pLeft; // left child of node

          BinaryTreeNode *m_pRight; // right child of node

          };

          分析:這是百度的一道筆試題,考查對樹這種基本數據結構以及遞歸函數的理解。

          當訪問到某一結點時,把該結點添加到路徑上,并累加當前結點的值。如果當前結點為葉結點并且當前路徑的和剛好等于輸入的整數,則當前的路徑符合要求,我們把它打印出來。如果當前結點不是葉結點,則繼續訪問它的子結點。當前結點訪問結束后,遞歸函數將自動回到父結點。因此我們在函數退出之前要在路徑上刪除當前結點并減去當前結點的值,以確保返回父結點時路徑剛好是根結點到父結點的路徑。我們不難看出保存路徑的數據結構實際上是一個棧結構,因為路徑要與遞歸調用狀態一致,而遞歸調用本質就是一個壓棧和出棧的過程。

          參考代碼:

          void FindPath(BinaryTreeNode* pTreeNode,int expectedSum,std::vector& path,int& currentSum)

          {

          if(!pTreeNode) return ;

          currentSum+=pTreeNode->m_nValue;

          path.push_back(pTreeNode->m_nValue);

          bool isLeaf=(!pTreeNode->m_pLeft && !pTreeNode->m_pRight);

          if(currentSum== expectedSum && isLeaf){

          std::vector::iterator iter=path.begin();

          for(;iter!=path.end();++iter) std::cout<<*iter<<'\t';

          std::cout<

          }

          if(pTreeNode->mpLeft) FindPath(pTreeNode->m_pLeft,expectedSum,path,currentSum);

          if(pTreeNode->m_pRight)

          FindPath(pTreeNode->m_pRight, expectedSum, path, currentSum);

          currentSum -= pTreeNode->m_nValue;

          path.pop_back();

          }

        3115795 主站蜘蛛池模板: 国产a√精品区二区三区四区| 精品无码国产一区二区三区AV| 无码电影在线观看一区二区三区| 无码人妻少妇久久中文字幕蜜桃 | 最新国产色视频在线播放| 视频二区中文字幕在线| 国产a在视频线精品视频下载| 亚洲无av在线中文字幕| 欧美激情一区二区三区成人| 无码射肉在线播放视频| 欧美 亚洲 日韩 在线综合| 国产亚洲精品在av| 日韩啪啪精品一区二区亚洲av| 午夜国产精品视频免费看电影| 亚洲a免费| 国产视频不卡一区二区三区| 视频一区二区三区高清在线| 国产亚洲AV电影院之毛片| 亚洲精品一区二区三区中文字幕 | 日韩午夜福利视频在线观看| 欧美丰满熟妇xxxx性ppx人交| 久久99精品一久久久久久| 亚洲欧美日韩综合久久| 人妻熟女一区二区aⅴ水野朝阳| av无码一区二区大桥久未| 久青草国产综合视频在线| 日韩一区二区三区av在线| 国产精品有码在线观看| 99久久精品国产一区二区暴力| 最新午夜男女福利片视频| 亚洲av永久无码精品天堂久久| 无码日韩做暖暖大全免费不卡| 亚洲av鲁丝一区二区三区黄| 一区二区三区AV波多野结衣| 1769国内精品视频在线播放| 久9视频这里只有精品| 免费播放岛国影片av| 国产免费高清69式视频在线观看| 国产91麻豆免费观看| 悠悠人体艺术视频在线播放| 思思热在线视频精品|