java二叉樹中序遍歷 中序遍歷和前序遍歷,如何求后序遍歷?
中序遍歷和前序遍歷,如何求后序遍歷?從前序的第一個(gè)結(jié)點(diǎn)開始確定根,中序決定左子樹和右子樹,如第一個(gè)結(jié)點(diǎn)A,根據(jù)中序可知,A的左子樹是DBE,右子樹是FC,再?gòu)那靶蛑写_定第二個(gè)根B,根據(jù)中序可知B的左子
中序遍歷和前序遍歷,如何求后序遍歷?
從前序的第一個(gè)結(jié)點(diǎn)開始確定根,中序決定左子樹和右子樹,如第一個(gè)結(jié)點(diǎn)A,根據(jù)中序可知,A的左子樹是DBE,右子樹是FC,再?gòu)那靶蛑写_定第二個(gè)根B,根據(jù)中序可知B的左子樹是D,右子樹為E,依次重復(fù)執(zhí)行,直到遍歷完所有結(jié)點(diǎn)。所以后序遍歷DEBFCA
數(shù)據(jù)結(jié)構(gòu)中已知前序序列和中序序列,怎么得出后序序列?
首先要明確前序,中序和后序的遍歷順序: 前序:父節(jié)點(diǎn),左子節(jié)點(diǎn),右子節(jié)點(diǎn); 中序:左子節(jié)點(diǎn),父節(jié)點(diǎn),右子節(jié)點(diǎn); 后序:左子節(jié)點(diǎn),右子結(jié)點(diǎn),父節(jié)點(diǎn); 明確之后,首先根據(jù)前序遍歷,確定整個(gè)二叉樹的根節(jié)點(diǎn)(前序的第一個(gè)節(jié)點(diǎn));再通過(guò)中序遍歷,可以直接根據(jù)根節(jié)點(diǎn)將整個(gè)二叉樹分為左右兩顆子樹。
這時(shí)再逐步根據(jù)前序和中序順序,不難畫出整個(gè)二叉樹。進(jìn)而可以寫出后序遍歷序列了。例:已知某二叉樹先序遍歷序列是: A B C D E F H ,中序遍歷序列是: B D C E A H F,寫出后序遍歷序列。由前序可知,該樹根節(jié)點(diǎn)為A; 由中序及根節(jié)點(diǎn)可知,B, D, C, E 在根節(jié)點(diǎn)的左子樹上H, F在根節(jié)點(diǎn)的右子樹上; 再逐步分析各子樹,可得該樹為: A ╱ ╲ B F ╲ ╱ C H ╱ ╲ D E 后序?yàn)椋篋ECBHFA誰(shuí)能解釋一下什么是前序遍歷,中序遍歷,和后?
先序遍歷:在第一次遍歷到節(jié)點(diǎn)時(shí)就執(zhí)行操作,一般只是想遍歷執(zhí)行操作(或輸出結(jié)果)可選用先序遍歷;中序遍歷:對(duì)于二分搜索樹,中序遍歷的操作順序(或輸出結(jié)果順序)是符合從小到大(或從大到?。╉樞虻?,故要遍歷輸出排序好的結(jié)果需要使用中序遍歷后序遍歷:后續(xù)遍歷的特點(diǎn)是執(zhí)行操作時(shí),肯定已經(jīng)遍歷過(guò)該節(jié)點(diǎn)的左右子節(jié)點(diǎn),故適用于要進(jìn)行破壞性操作的情況,比如刪除所有節(jié)點(diǎn)
知道后序遍歷序列和中序遍歷序列的算法(怎么求前序)?
abdgcehf:解法,前序,左中右,后序,左右中,中序,左中又;根據(jù)后續(xù)a是根結(jié)點(diǎn),根據(jù)中序dgb是左邊的樹,剩下的是右邊的,把dgb看成一棵書再重復(fù)上面的可以解出
在二叉樹中,已經(jīng)知道前序遍歷和中序遍歷,怎么求后序遍歷?
前序遍歷的簡(jiǎn)稱為VLR(根結(jié)點(diǎn)-左子樹-右子樹),序?yàn)長(zhǎng)VR,可以看到最后一個(gè)相同,于是我們同位相同的為R(右子樹)其它位按組合邏輯取反。我一般用自創(chuàng)撇捺形象圖,就是畫出撇捺的走勢(shì),比如一前序?yàn)锳BCDEF,中序?yàn)镃BEDFA,后序就為CEFDBA。