日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员面试题精选100题(12)-从上往下遍历二元树[数据结构] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:輸入一顆二元樹,從上往下按層打印樹的每個結點,同一層中按照從左往右的順序打印。

例如輸入

????? 8
??? /? \
?? 6??? 10
? /\???? /\
?5? 7?? 9? 11

輸出8 ??6 ??10 ??5 ??7 ??9 ??11。

分析:這曾是微軟的一道面試題。這道題實質上是要求遍歷一棵二元樹,只不過不是我們熟悉的前序、中序或者后序遍歷。

我們從樹的根結點開始分析。自然先應該打印根結點8,同時為了下次能夠打印8的兩個子結點,我們應該在遍歷到8時把子結點6和10保存到一個數據容器中。現在數據容器中就有兩個元素6?和10了。按照從左往右的要求,我們先取出6訪問。打印6的同時要把6的兩個子結點5和7放入數據容器中,此時數據容器中有三個元素10、5和7。接下來我們應該從數據容器中取出結點10訪問了。注意10比5和7先放入容器,此時又比5和7先取出,就是我們通常說的先入先出。因此不難看出這個數據容器的類型應該是個隊列。

既然已經確定數據容器是一個隊列,現在的問題變成怎么實現隊列了。實際上我們無需自己動手實現一個,因為STL已經為我們實現了一個很好的deque(兩端都可以進出的隊列),我們只需要拿過來用就可以了。

我們知道樹是圖的一種特殊退化形式。同時如果對圖的深度優先遍歷和廣度優先遍歷有比較深刻的理解,將不難看出這種遍歷方式實際上是一種廣度優先遍歷。因此這道題的本質是在二元樹上實現廣度優先遍歷。

參考代碼:

#include <deque> #include <iostream> using namespace std;struct BTreeNode // a node in the binary tree {int m_nValue; // value of nodeBTreeNode *m_pLeft; // left child of nodeBTreeNode *m_pRight; // right child of node };/// // Print a binary tree from top level to bottom level // Input: pTreeRoot - the root of binary tree /// void PrintFromTopToBottom(BTreeNode *pTreeRoot) {if(!pTreeRoot)return;// get a empty queuedeque<BTreeNode *> dequeTreeNode;// insert the root at the tail of queuedequeTreeNode.push_back(pTreeRoot);while(dequeTreeNode.size()){// get a node from the head of queueBTreeNode *pNode = dequeTreeNode.front();dequeTreeNode.pop_front();// print the nodecout << pNode->m_nValue << ' ';// print its left child sub-tree if it hasif(pNode->m_pLeft)dequeTreeNode.push_back(pNode->m_pLeft);// print its right child sub-tree if it hasif(pNode->m_pRight)dequeTreeNode.push_back(pNode->m_pRight);} }

?

本文已經收錄到《劍指Offer——名企面試官精講典型編程題》一書中,有改動,書中的分析講解更加詳細。歡迎關注。

博主何海濤對本博客文章享有版權。網絡轉載請注明出處

http://zhedahht.blog.163.com/ 。整理出版物請和作者聯系。 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。