簡述對dom樹的理解 請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?前序遍歷:其思想是先遍歷當前節(jié)點,然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點,并等待它被取出以遍歷右子樹。如果堆棧
請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
前序遍歷:其思想是先遍歷當前節(jié)點,然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點,并等待它被取出以遍歷右子樹。
如果堆棧不為空或節(jié)點指針不為空,則進入循環(huán)
如果當前節(jié)點不為空,則先將右側(cè)子節(jié)點放入堆棧(無論右側(cè)節(jié)點是否為空),然后輸出當前節(jié)點。賦值節(jié)點指針是左子節(jié)點。
如果當前節(jié)點為空。取出堆棧中的節(jié)點。
我懶得在后面寫。有時間就寫。
不建議業(yè)主問這種問題,但愿意回答的人不多。我想你可以問:我在哪里可以得到帶注釋的XXX源代碼
好吧,你的第一步是正確劃分a作為根,DGB作為左子樹,echf作為右子樹。接下來,將左子樹的前序遍歷看作bdgb。首先知道B是左子樹的根,與A相連,然后看左子樹的中序遍歷,dgbd和G在B之前被訪問,所以B和G應(yīng)該在B的左子樹中被訪問樹的形狀如下--A-/--B-/DG,DG的確定是根據(jù)預(yù)購單。如果首先訪問D,則D是根。如果首先訪問D,則可以確定G為D的右子樹的左側(cè)。如果你理解上面的右邊,那就很簡單了。對于前序遍歷CEFH也是如此,以確定C是右子樹的根。然后預(yù)序遍歷echfe是C的左子樹,HF是C的右子樹確保在查看預(yù)序遍歷之前,先訪問f,f是根,h先訪問,h的左子樹是f。整個樹將顯示出來,如下圖所示。后序是小菜一碟
二叉樹的層次遍歷是指從二叉樹的第一層(根節(jié)點)開始,從上到下逐層遍歷。在同一層中,按從左到右的順序逐個訪問節(jié)點。在逐層遍歷的過程中,從上到下,從左到右在同一層中訪問樹中的元素。其思想是:用一個隊列來保存當前節(jié)點的左右子節(jié)點,實現(xiàn)序列遍歷。在層次遍歷中,設(shè)置了一個隊列結(jié)構(gòu)。遍歷從二叉樹的根節(jié)點開始。首先,將根節(jié)點指向隊列,然后從隊列的頭部獲取元素。對于每個元素,將執(zhí)行以下兩個操作:1。訪問元素所指向的節(jié)點。2如果元素指示的節(jié)點的左、右子節(jié)點不為空,則元素指示的節(jié)點的左子指針和右子指針將按順序排隊。當隊列為空時,二叉樹的層次遍歷結(jié)束。由于遍歷所使用的數(shù)據(jù)結(jié)構(gòu)是一個隊列而不是一個堆棧,因此很難編寫分層遍歷的遞歸程序。下面的程序是用來逐層遍歷二叉樹的,它使用的是隊列數(shù)據(jù)結(jié)構(gòu)。隊列中的元素指向二叉樹節(jié)點。當然,您也可以使用公式化隊列。在程序中,只有當樹不為空時,它才進入wehile循環(huán)。首先訪問根節(jié)點,然后將其子節(jié)點添加到隊列中。當queue add操作失敗時,add將引發(fā)nomem異常。因為沒有捕獲異常,所以當異常發(fā)生時,函數(shù)將退出。將T的子元素添加到隊列后,T元素將從隊列中刪除。