① 怎樣才能學好數據結構
一時間也寫不出太具體的方法 就在網上為你找了一個前輩發的帖子 你看一下,肯定比我寫的好。
-------------------------
學習數據結構這門課程至少要經歷三個過程,方可真正
的掌握這門課程,得到一個滿意的成績。這個過程簡單來說就是三個字:活→死→活。
首先,是一個學「活」的過程,就要要求我們對書中的每一個演算法,能夠在腦海中
建立起相應的模型,而不是死板的演算法。比如樹的遍歷非遞歸演算法,在入棧與出棧的過程
中,我們就要在腦海中形成訪問樹每個結點的過程,真正掌握住這個演算法。這樣,全書復
習下來,你的腦海中就有了整個數據結構的模型概念,對任何一個陌生的演算法,將不感到
生疏和害怕。
有些同學到了此處就覺得數據結構已經學好,可以萬事大吉了,其實這還遠遠不夠
,如果參加考試,往往會拿不到高分,甚至還會納悶,為何自己數據結構學的這樣好,成
績卻不盡如人意,因此產生了批卷老師判錯的想法。所以第二個過程,就是一個學「死」
的過程,這個過程要求,要記住書中的演算法(功利一點就是要背誦會所報考學校的考試要
求的演算法)。有的學校有別的特殊要求,也一並背會。如上海交通大學喜歡考平均復雜度
的分析這樣的題目,我們在書上可以找到這樣的分析一共十一個,全部背會,就免去了在
考場上分析的麻煩,如果連答案都能記住,那麼,也不會因為粗心失分了。這一過程也許
有些枯燥,但卻是最重要的過程,比如說背會了樹的後序遍歷非遞歸,遇到了像求某個結
點的所有祖先,兩個結點的共同祖先這樣的題,不用想,直接套用。這樣才是考試的高分
的關鍵:在考場上,遇到考題,不用思考,直接從腦海中找匹配的演算法,直接引用。
有了第二個過程的辛苦,我們就可以得到一個比較高的分數了,如果還想提高,就
要進行第三個過程,再學「活」的過程。這一個過程中就要要求我們,在第二步的基礎上
,多進行思考,看看有哪些演算法有共性,比如說:樹的前序非遞歸遍歷演算法和圖的深度優
先遍歷演算法是不是類似啊,有些什麼不同,有些什麼相同,為什麼會相同;森林轉化為二
叉樹和圖的生成樹的演算法也是這樣,等等。總結出這種共性,這樣就能正確有效的記憶算
法,同時,遇到難題不至於慌亂,能夠從容下手解題。
對於總結共性問題上,這里舉一小個例子,(呵呵,我當初總結出這個,並且和ka
oyan.com斑竹一具討論確定後三天,就在2002年交大第一題考出類似東東)比如樹的遍
歷,不管是遞歸還是非遞歸,也不管是線索樹,還是頭結點有父母信息的樹,它的遍歷其實就是一個尋找到遍歷的第
一個結點,然後再尋找它的後繼結點的過程,我們歸納到此處,就可以試著總結一下三種
遍歷的後繼結點是哪個,有幾種情況:
對於前序遍歷,它的後繼如下:
(1)若有左孩子,則後繼是左孩子;
(2)若無左孩子,有右孩子,則後繼是右孩子;
(3)若既無左孩子,又無右孩子,則是一片葉子;再討論:
(a)若是其父母的左孩子,且父母有右孩子,則後繼是父母的右孩子。
(b)若是其父母的左孩子,且父母無右孩子;
(c)若是其父母的右孩子。
b,c都表示這是某個節點的左子樹前序遍歷的最後一個節點,則需要找第一個有右子
樹的「左祖先」(定義「左祖先」,即找第一個使得當前節點在這個祖先的左子樹上),
然後後繼就是這個祖先的右孩子。
對於中序遍歷,它的後繼如下:
(1)如有右孩子,後繼是右孩子的最左下節點;
(2)若無右孩子,且是父母的左孩子,則後繼就是父母;
(3)若無右孩子,且是父母的右孩子,則一直上溯到第一個「左祖先」(定義如前)
則後繼就是這個祖先。若無這樣的祖先,說明已經遍歷完畢。
對於後序遍歷,它的後繼如下:
(1)若是父母的右孩子,則後繼是父母;
(2)若是父母的左孩子,且父母無右子樹,則後繼是父母;
(3)若是父母的左孩子,父母有右子樹,則後繼是父母右子樹的最先訪問到的節點(
指向父母的右子樹後,一直往左,若不行的話,往右一步,一直到葉子)
總結完了,想一想,我們還能得到哪些提示?經常有一類型題目,要求求某個結點
的直接前驅。其實求前序遍歷的前驅和求後序遍歷的後繼是一樣的,只不過把左換成右而
已,前序遍歷的求後繼和後序遍歷的求前驅、中序遍歷的求前驅和中序遍歷求後繼都有這
樣的對稱關系。因此,總結出共性的東西,許多題目就可以迎刃而解了。問一問讀到這里
的讀者,你現在能夠自己在腦子裡面,非常輕松地像上面那樣,把這個例子裡面的情況都
條理清楚地分析總結出來嗎?如果現在還不行,到考試之前,你必須掌握到這種程度,才
能得到一個自己很滿意的分數。
經過以上的三個過程復習,相信讀者對數據結構的掌握就可以到達比較高的水平了
,如果參加考試,獲得一個比較滿意的成績也很有希望了。當然,達到這一
步並不容易,大量的練習是真正掌握的必由之路。因此,我們建議大家能夠下功夫把本書
中的題目完整地做一遍。能夠真正把本書中的所有題都掌握,絕不僅僅意味著僅會了書中
這幾百道題目,而是意味著對數據結構這門課程的理解,以及對問題的分析能力都有很大
的提高,這樣在考場上即使遇到未曾見過的題目,也就可以從容應對了!
② 如何學好數據結構
先看書了解每種數據結構的基本概念,性質等
然後常試著不看書上的偽代碼用語言寫出相應數據結構的實現
如果不能完成,那先照書上偽代碼打一遍,然後再能自己空手寫出來
當你學完後要試著為你學過的數據結構分類
比如線型,樹型,圖等
另外基本的數據結構學完後試著學學高級數據結構,比如黑紅樹等
③ 怎樣學好《數據結構》
<!--STATUS OK-->
<html>
<head>
<title>網路知道搜索_英語 繆語 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="/iknow1_0.css" rel="stylesheet" type="text/css">
<style>
#pg{font-size:14px;word-spacing:0px!important;word-spacing:4px;font-family:arial;text-align:left;height:30px;line-height:30px;margin:20px 0px}
.s{width:8%;padding-left:10px; height:25px;}
.f14{FONT-SIZE:14px}
.lklbe{color:#666666;}
a.lklbe:link,a.lklbe:visited{text-decoration:underline;color:#7777cc;}
.h5{height:5px;line-height:5px;}
.rga2,.rga4{right:-2px}
.tj2,.tj4{right:0px}
</style>
<script >
if (window.name == 'nw') { window.name = '';}
function ga(o,e){if (document.getElementById){a=o.id.substring(1); p = "";r = "";g = e.target;if (g)
{ t = g.id;f = g.parentNode;if (f) {p = f.id;h = f.parentNode;if (h) r = h.id;}} else{h = e.srcElement;f = h.parentNode;if (f) p = f.id;t = h.id;}if (t==a || p==a || r==a) return true;window.open(document.getElementById(a).href,'_blank')}}
function ss(w){window.status=w;return true;}
function cs(){window.status='';}
</script>
</head>
<body>
<div id="usrbar"><nobr><a href="http://..com/q?ct=24&cm=16&tn=ikusercenter#uscore" target="_blank"><strong>yhzking1991</strong></a> 初學弟子 一級(43)|<a href="/q?ct=24&cm=16&tn=ikusercenter#ask" target="_blank">我的提問</a>|<a href="/q?ct=24&cm=16&tn=ikusercenter#answer" target="_blank">我的回答</a>|<span id="mnum"></span>|<a href="http://www..com/">網路首頁</a>|<script language="javascript">document.write('<a href="http://passport..com/?logout&aid=7&u='+escape(location.href)+'">退出</a>');</script></nobr></div>
<!--開始-->
<table width="750" border="0" cellspacing="0" cellpadding="0" class="hd"><tr>
<td width="146" valign="top"><a href="/"><img src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/logo-.gif" border="0" alt="網路知道" width="137" height="46" vspace="3"></a></td>
<td><div id="tab"><a href="http://news..com/ns?cl=2&rn=20&tn=news&word=%D3%A2%D3%EF+%E7%D1%D3%EF&t=1" class="headTit">新聞</a><a href="http://www..com/s?cl=3&wd=%D3%A2%D3%EF+%E7%D1%D3%EF" class="headTit">網頁</a><a class="headTit" href="http://post..com/f?kw=%D3%A2%D3%EF+%E7%D1%D3%EF&t=4">貼吧</a><font class="headTitB">知道</font><a class="headTit" href="http://mp3..com/m?tn=mp3&ct=134217728&lm=-1&word=%D3%A2%D3%EF+%E7%D1%D3%EF&t=2">MP3</a><a class="headTit" href="http://image..com/i?tn=image&ct=201326592&lm=-1&cl=2&word=%D3%A2%D3%EF+%E7%D1%D3%EF&t=3">圖片</a><a class="headTit" href="http://ke..com/w?ct=17&lm=0&tn=WikiSearch&pn=0&rn=10&word=%D3%A2%D3%EF+%E7%D1%D3%EF">網路</a></div>
<table border="0" cellspacing="0" cellpadding="0"><tr><form action="/q" name="ftop" method="get">
<td nowrap> <input class=hdi maxlength=256 tabindex=1 size=42 name=word value="英語 繆語"></td><td><a href="http://www..com/search/_help.html">幫助</a></td></tr></table>
<div style="margin-top:4px"><input type="submit" tabindex=2 value="搜索答案" class="bnsrh"><input type="hidden" name="ct" value="17"><input type="hidden" name="pn" value="0"><input type="hidden" name="tn" value="ikaslist"><input type="hidden" name="rn" value="10"><input type="button" onclick="ask(ftop);" tabindex=3 value="我要提問" class="bnsrh" style="margin-left:8px"></div>
</form>
<form name="fask" action="/q" method="get"> <input type="hidden" name="ct" value="17"><input type="hidden" name="pn" value="0"><input type="hidden" name="tn" value="ikask"><input type="hidden" name="rn" value="10"><input type="hidden" name="word" value=""> <input type="hidden" name="cm" value="1"><input type="hidden" name="lm" value="394496"><input type="hidden" name="qf" value="1">
</form>
</td></tr>
</table>
<script language="JavaScript">function ask(fn){document.fask.word.value=fn.word.value;fask.submit();}</script>
<!--結束-->
<div id="main">
<!--[if IE]>
<script language="JavaScript">
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw >= 1016) objmain.style.width="976px"; else objmain.style.width="782px"; }
updatesize(); window.onresize = updatesize;
</script>
<![endif]-->
<div class="path"><a href="/">網路知道</a> > 搜索結果</div>
<div id="subline"></div>
<div id="sub">
<span class="tba1"></span><span>已解決問題</span><span class="tba3"></span>
<a href="/q?ct=17&lm=65536&tn=ikaslist&pn=0&rn=10&word=%D3%A2%D3%EF+%E7%D1%D3%EF">待解決問題</a><span class="tbb2"></span>
<a href="/q?ct=17&lm=131072&tn=ikaslist&pn=0&rn=10&word=%D3%A2%D3%EF+%E7%D1%D3%EF">投票中問題</a><span class="tbb2"></span>
</div>
<div class="h5"></div>
<div id="right">
<div style="color:#666666;text-align:right;">共搜到相關問題 1 項</div>
<div class="h5"></div>
<div class="h5"></div>
</div>
<div id="center">
<table border=0 cellpadding=0 cellspacing=0><tr><td class=f><a href="/question/11313842.html?si=1" target=_blank><font size=3>《古詩》<font color=#C60A00>英語</font>怎麼樣說?</font></a>
<br><font size=-1>「古詩」和「歇後語」和<font color=#C60A00>繆語</font>,用<font color=#C60A00>英語</font>該怎麼樣說呢?</font><br><div class="lklbe"><a href="http://passport..com/?detail&aid=7&default_tab=2&un=%D0%C7%C2%DE%A4%CE%D0%C7%E8%A8" class="lklbe" target=_blank>星羅の星璦</a> - 2006-8-17 10:18 - 最佳回答者: <a href="http://passport..com/?detail&aid=7&default_tab=2&&un=%A6%A1%A6%A2%A6%A3%A6%A4%A6%A5%A6%A6" class="lklbe"
target=_blank>ΑΒΓΔΕΖ</a> - <a href="/browse/187?lm=9" class="lklbe">外語/出國</a></div></td></tr></table><br />
<div style="height:60px;width:100%;clear:both">
<table width="96%" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr><td style="font-size:14px;font-weight:bold;height:40px;width:70px;">相關搜索</td>
<td rowspan="2" valign="middle">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td nowrap class="f14"><a href="/q?word=%E7%D1%D3%EF&ct=17&pn=0&tn=ikaslist&rn=10&srs=1&srsod=0">繆語</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%B7%AD%D2%EB&ct=17&pn=0&tn=ikaslist&rn=10&srs=0&srsod=1">英語翻譯</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%CB%C4%BC%B6&ct=17&pn=0&tn=ikaslist&rn=10&srs=0&srsod=2">英語四級</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%D7%F7%CE%C4&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">英語作文</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%D4%DA%CF%DF%B7%AD%D2%EB&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">英語在線翻譯</a></td>
</tr>
<tr>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%CC%FD%C1%A6&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">英語聽力</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%D1%A7%CF%B0&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">英語學習</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D0%C2%B8%C5%C4%EE%D3%A2%D3%EF&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">新概念英語</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%D3%A2%D3%EF%B4%CA%B5%E4&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">英語詞典</a></td>
<td nowrap class="s"></td>
<td nowrap class="f14"><a href="/q?word=%B7%E8%BF%F1%D3%A2%D3%EF&ct=17&pn=0&tn=ikaslist&rn=10&srs=0">瘋狂英語</a></td>
</tr>
</table>
</td></tr>
<tr><td></td></tr></table>
</div>
<div class="">
<div class="bg mt20 ">
<div class="rga1"></div><div class="rga2"></div>
<div class="p10" align="center">
<form action="/q" name="fbot" method="get">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td nowrap><input maxlength="256" tabindex=11 size="42" class="hdi" name=word value="英語 繆語"></td>
<td nowrap><a href="http://www..com/search/_help.html" target="_blank">幫助</a></td>
</tr>
<tr>
<td colspan="2">
<div style="margin-top:4px">
<input type="submit" tabindex=12 value="搜索答案" class="btn">
<input type="button" onclick="ask(fbot);" style="margin-left:8px" tabindex=13 value="我要提問" class="btn">
<input type="hidden" name="ct" value="17">
<input type="hidden" name="pn" value="0">
<input type="hidden" name="tn" value="ikaslist">
<input type="hidden" name="rn" value="10">
</div>
</td>
</tr>
</table>
</form>
</div>
<div class="">
<div class="rcb rga3"></div><div class="rga4"></div>
</div>
</div>
</div>
</div>
</div>
<script language="JavaScript">
var Msg_loopNum = 5;
function showMsg()
{
if(typeof redmsg != 'undefined') {
if (!redmsg || redmsg.length < 1) return;
document.getElementById('mnum').innerHTML = redmsg;
}else{
if(Msg_loopNum > 0) {setTimeout(function(){showMsg();},100);Msg_loopNum--;}
}
}
</script>
<script src="https://gsp0..com/8_UFsjip0QIZ8tyhnq/ms?ct=18&cm=3&tn=bmSelfUsrStat&mpn=13227114&un=yhzking1991"></script>
<SCRIPT>showMsg();</SCRIPT>
<div id="ft">&;2007 Bai</div>
<img src="http://c..com/c.gif?t=2&q=%D3%A2%D3%EF+%E7%D1%D3%EF&p=0&pn=1" style="display:none;"/>
</body>
</html>
④ 如何學好數據結構
其實我也是學數據結構的,說實在的,學這個東西,最重要不是難不難的問題,主要是看你怎麼做。如果你是自學數據結構的話,最好在參考著關於數據結構的語言編程。例如你要選修的是數據結構的c++版,你就要買本c++教程,首先把語言學好了,才能保證你能夠讀懂數據結構的偽代碼。當然學數據結構最主要的是演算法,每學一章之後都要有一個完整的總結,都要能夠利用書中所學的知識進行以下必要的編程(這個是必須的)否則相當與你沒有學。你比如學數據結構要學單鏈表,那你首先應該了解怎麼製作單鏈表,然後試著用編程的方法描述出來。當然了,學數據結構最主要的還是各個演算法本身,對代碼的要求不是特別的高,但是試 想如果你連代碼都不會學,學演算法只能是應付公事。所以一定要掌握代碼。大學考試應該不會考你太難的代碼,但是研究生入學考試肯定會考的。象我一個大學老師說她考研的時候就考了個堆排序的代碼描述。所以學數據結構最重要的是培養你寫代碼的能力。力爭把代碼寫好,前程會一片光明。
⑤ 怎麼學好數據結構
數據結構作為大學計算機相關專業的學生來說是一門十分重要的課程,無論是以後演算法思想的滲透,還是工作中程序代碼的處理,都離不開數據結構的影子。但是因為數據結構知識較多,並且比較抽象,對於很多人來說學它就感到頭疼。其實大可不必,數據結構的學習自然有其對應的方法。
還有一點,要想學習好數據結構,好的課程是必不可少的,如果大學老師講的足夠好的話完全可以帶你領略數據結構的美麗風景,如果你想自學成才的話,推薦浙江大學陳越姥姥的課和清華大學鄧俊輝老師的課,都十分透徹易懂。
⑥ 怎麼才能學好數據結構
一個很簡單的方法..學好數據結構..把那本書反復的看一百遍...我們班的一個人就是這樣做的..只要你有那個耐心...你一定會學懂..學懂...呵呵...
⑦ 怎樣學好數據結構
最好的方法就是用計算機語言——C,C++,Java等等,把裡面的數據結構和演算法實現了,那樣才是透徹的理解和運用。
⑧ 怎麼學好數據結構..
如果說C是一門編程語言的話,那麼掌握了C也就僅僅掌握了一門編程的工具而已,要知道編程的工具有很多,JAVA,VB,C++ 都是編程工具而已
而想在軟體上有所作為,那麼學好數據結構是必須的,可以這樣說,數據結構是內功,一般安排在學習C語言之後學習.掌握好了數據結構就可以掌握程序的內核,演算法思想,這對計算機專業人事來講是必須的.
數據結構的學習一定要多看書,把書認真的多看幾遍,多理解上面的演算法,多做練習,勤思考,清華大學嚴老師編的書是最好的,不過比較難,開始建議讀一本自考的教材或者高等教育出版社的書比較好理解,自己能看懂,入門了在來看清華的那本,那本的演算法是最經典的,,不可不看/
數據結構是計算機的核心課程,一般學習了C以後都要學習數據結構和操作系統,這樣才能對計算機有個較深的認識.. 在研究生考試中,數據結構也是必考的,所以學好它是必須的!
⑨ 怎麼才能學好數據結構
要理解演算法的原理, 主要是會用演算法 ,最好的辦法將演算法用到你的代碼中去 , 那樣你對演算法才有根深的認識 ,祝你好運!
⑩ 如何學好數據結構
(轉)
前面的話:輕舟曾經熱衷於把自己復習時候遇到的問題和總結的經驗分享給大家,不過
來了交大以後,發現這里卧虎藏龍,自己只不過是溪底小蝦一個。於是放棄了以前出數
據結構筆記的打算,不過,最近又有許多同學問起我數據結構的事情,這里就把以前總
結的筆記的前言帖出來,但絕對不會有後續部分,希望大家見諒。
學習數據結構這門課程至少要經歷三個過程,方可真正
的掌握這門課程,得到一個滿意的成績。這個過程簡單來說就是三個字:活→死→活。
首先,是一個學「活」的過程,就要要求我們對書中的每一個演算法,能夠在腦海中
建立起相應的模型,而不是死板的演算法。比如樹的遍歷非遞歸演算法,在入棧與出棧的過程
中,我們就要在腦海中形成訪問樹每個結點的過程,真正掌握住這個演算法。這樣,全書復
習下來,你的腦海中就有了整個數據結構的模型概念,對任何一個陌生的演算法,將不感到
生疏和害怕。
有些同學到了此處就覺得數據結構已經學好,可以萬事大吉了,其實這還遠遠不夠
,如果參加考試,往往會拿不到高分,甚至還會納悶,為何自己數據結構學的這樣好,成
績卻不盡如人意,因此產生了批卷老師判錯的想法。所以第二個過程,就是一個學「死」
的過程,這個過程要求,要記住書中的演算法(功利一點就是要背誦會所報考學校的考試要
求的演算法)。有的學校有別的特殊要求,也一並背會。如上海交通大學喜歡考平均復雜度
的分析這樣的題目,我們在書上可以找到這樣的分析一共十一個,全部背會,就免去了在
考場上分析的麻煩,如果連答案都能記住,那麼,也不會因為粗心失分了。這一過程也許
有些枯燥,但卻是最重要的過程,比如說背會了樹的後序遍歷非遞歸,遇到了像求某個結
點的所有祖先,兩個結點的共同祖先這樣的題,不用想,直接套用。這樣才是考試的高分
的關鍵:在考場上,遇到考題,不用思考,直接從腦海中找匹配的演算法,直接引用。
有了第二個過程的辛苦,我們就可以得到一個比較高的分數了,如果還想提高,就
要進行第三個過程,再學「活」的過程。這一個過程中就要要求我們,在第二步的基礎上
,多進行思考,看看有哪些演算法有共性,比如說:樹的前序非遞歸遍歷演算法和圖的深度優
先遍歷演算法是不是類似啊,有些什麼不同,有些什麼相同,為什麼會相同;森林轉化為二
叉樹和圖的生成樹的演算法也是這樣,等等。總結出這種共性,這樣就能正確有效的記憶算
法,同時,遇到難題不至於慌亂,能夠從容下手解題。
對於總結共性問題上,這里舉一小個例子,(呵呵,我當初總結出這個,並且和ka
oyan.com斑竹一具討論確定後三天,就在2002年交大第一題考出類似東東)比如樹的遍
歷,不管是遞歸還是非遞歸
,也不管是線索樹,還是頭結點有父母信息的樹,它的遍歷其實就是一個尋找到遍歷的第
一個結點,然後再尋找它的後繼結點的過程,我們歸納到此處,就可以試著總結一下三種
遍歷的後繼結點是哪個,有幾種情況:
對於前序遍歷,它的後繼如下:
(1)若有左孩子,則後繼是左孩子;
(2)若無左孩子,有右孩子,則後繼是右孩子;
(3)若既無左孩子,又無右孩子,則是一片葉子;再討論:
(a)若是其父母的左孩子,且父母有右孩子,則後繼是父母的右孩子。
(b)若是其父母的左孩子,且父母無右孩子;
(c)若是其父母的右孩子。
b,c都表示這是某個節點的左子樹前序遍歷的最後一個節點,則需要找第一個有右子
樹的「左祖先」(定義「左祖先」,即找第一個使得當前節點在這個祖先的左子樹上),
然後後繼就是這個祖先的右孩子。
對於中序遍歷,它的後繼如下:
(1)如有右孩子,後繼是右孩子的最左下節點;
(2)若無右孩子,且是父母的左孩子,則後繼就是父母;
(3)若無右孩子,且是父母的右孩子,則一直上溯到第一個「左祖先」(定義如前)
則後繼就是這個祖先。若無這樣的祖先,說明已經遍歷完畢。
對於後序遍歷,它的後繼如下:
(1)若是父母的右孩子,則後繼是父母;
(2)若是父母的左孩子,且父母無右子樹,則後繼是父母;
(3)若是父母的左孩子,父母有右子樹,則後繼是父母右子樹的最先訪問到的節點(
指向父母的右子樹後,一直往左,若不行的話,往右一步,一直到葉子)
總結完了,想一想,我們還能得到哪些提示?經常有一類型題目,要求求某個結點
的直接前驅。其實求前序遍歷的前驅和求後序遍歷的後繼是一樣的,只不過把左換成右而
已,前序遍歷的求後繼和後序遍歷的求前驅、中序遍歷的求前驅和中序遍歷求後繼都有這
樣的對稱關系。因此,總結出共性的東西,許多題目就可以迎刃而解了。問一問讀到這里
的讀者,你現在能夠自己在腦子裡面,非常輕松地像上面那樣,把這個例子裡面的情況都
條理清楚地分析總結出來嗎?如果現在還不行,到考試之前,你必須掌握到這種程度,才
能得到一個自己很滿意的分數。
經過以上的三個過程復習,相信讀者對數據結構的掌握就可以到達比較高的水平了
,如果參加考試,獲得一個比較滿意的成績也很有希望了。當然,達到這一
步並不容易,大量的練習是真正掌握的必由之路。因此,我們建議大家能夠下功夫把本書
中的題目完整地做一遍。能夠真正把本書中的所有題都掌握,絕不僅僅意味著僅會了書中
這幾百道題目,而是意味著對數據結構這門課程的理解,以及對問題的分析能力都有很大
的提高,這樣在考場上即使遇到未曾見過的題目,也就可以從容應對了!