二叉樹(shù)遍歷

首先,我們來(lái)看一下二叉樹(shù)結(jié)構(gòu)。

二叉樹(shù)

二叉樹(shù)有三種遍歷方式:

前序遍歷:根左右 ABDCEF

中序遍歷:左根右 DBAECF

后序遍歷:左右根 DBEFCA

加上逐層遍歷:ABCDEF

因此笤妙,按照這樣的順序鲫趁,就有四種不同的代碼踱葛,具體如下土陪。

class TreeNode

{

public T data;

public TreeNodeleft;

public TreeNoderight;

public TreeNode(T data, TreeNode?left, TreeNode?right)

{

this.data = data;

? ? ? ? this.left = left;

? ? ? ? this.right = right;

? ? }

}

public class BinaryTree {

????public static void main(String[] args) {

????????TreeNode D =new TreeNode<>("D",null,null);

? ? ? ? TreeNode E =new TreeNode<>("E",null,null);

? ? ? ? TreeNode F =new TreeNode<>("F",null,null);

? ? ? ? TreeNode B =new TreeNode<>("B",D,null);

? ? ? ? TreeNode C =new TreeNode<>("C",E,F);

? ? ? ? TreeNode root =new TreeNode<>("A",B,C);

? ? ? ? pre(root);

? ? ? ? System.out.println();

? ? ? ? mid(root);

? ? ? ? System.out.println();

? ? ? ? bac(root);

? ? ? ? System.out.println();

? ? }

//遞歸后序

private static void bac(TreeNode root) {

if(root !=null){

bac(root.left);

? ? ? ? ? ? bac(root.right);

? ? ? ? ? ? System.out.print(root.data+"? ");

? ? ? ? }

}

//遞歸中序

private static void mid(TreeNode root) {

if(root !=null){

mid(root.left);

? ? ? ? ? ? System.out.print(root.data+"? ");

? ? ? ? ? ? mid(root.right);

? ? ? ? }

}

//遞歸前序

private static void pre(TreeNode root) {

if(root !=null){

System.out.print(root.data+"? ");

? ? ? ? ? ? pre(root.left);

? ? ? ? ? ? pre(root.right);

? ? ? ? }

}

//非遞歸后序

private static void baccir(TreeNode root) {

class NodeFlag{

TreeNodenode;

? ? ? ? char tag;

? ? ? ? public NodeFlag(TreeNode node, char tag) {

super();

? ? ? ? ? ? this.node = node;

? ? ? ? ? ? this.tag = tag;

? ? ? ? }

}

Stack>> stack=new Stack>>();

? ? TreeNode p=root;

? ? NodeFlag> bt;

? ? //棧不空或者p不空時(shí)循環(huán)

? ? while(p!=null || !stack.isEmpty())

{

//遍歷左子樹(shù)

? ? ? ? while(p!=null)

{

bt=new NodeFlag(p, 'L');

? ? ? ? ? ? stack.push(bt);

? ? ? ? ? ? p=p.left;

? ? ? ? }

//左右子樹(shù)訪問(wèn)完畢訪問(wèn)根節(jié)點(diǎn)

? ? ? ? while(!stack.isEmpty() && stack.peek().tag=='R')

{

bt=stack.pop();

? ? ? ? ? ? System.out.print(bt.node.data+"? ");

? ? ? ? }

//遍歷右子樹(shù)

? ? ? ? if (!stack.isEmpty())

{

bt=stack.peek();

? ? ? ? ? ? bt.tag='R';

? ? ? ? ? ? p=bt.node;

? ? ? ? ? ? p=p.right;

? ? ? ? }

}

}

//非遞歸中序

private static void midcir(TreeNode root) {

TreeNode p = root;

? ? Stack> stack =new Stack<>();

? ? while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

? ? ? ? ? ? p = p.left;

? ? ? ? }else {

p = stack.pop();

? ? ? ? ? ? System.out.print(p.data+"? ");

? ? ? ? ? ? p = p.right;

? ? ? ? }

}

}

//非遞歸前序

private static void precir(TreeNode root) {

TreeNode p = root;

? ? Stack> stack =new Stack<>();

? ? while(p!=null||!stack.isEmpty()){

if(p!=null){

stack.push(p);

? ? ? ? ? ? System.out.print(p.data+"? ");

? ? ? ? ? ? p = p.left;

? ? ? ? }else {

p = stack.pop();

? ? ? ? ? ? p = p.right;

? ? ? ? }

}

}

//逐層遍歷

private static void printNode(TreeNode root) {

LinkedList> queue =new LinkedList>();

? ? if(root!=null){

queue.add(root);

? ? }

while(!queue.isEmpty()){

root = queue.getFirst();

? ? ? ? System.out.print(root.data+"? ");

? ? ? ? queue.removeFirst();

? ? ? ? if(root.left!=null){

queue.add(root.left);

? ? ? ? }

if(root.right!=null){

queue.add(root.right);

? ? ? ? }

}

}

}





個(gè)人公號(hào):【排骨肉段】,可以關(guān)注一下笔喉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末取视,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子常挚,更是在濱河造成了極大的恐慌作谭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件待侵,死亡現(xiàn)場(chǎng)離奇詭異丢早,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秧倾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門怨酝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人那先,你說(shuō)我怎么就攤上這事农猬。” “怎么了售淡?”我有些...
    開(kāi)封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵斤葱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我揖闸,道長(zhǎng)揍堕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任汤纸,我火速辦了婚禮衩茸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贮泞。我一直安慰自己楞慈,他們只是感情好幔烛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著囊蓝,像睡著了一般饿悬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聚霜,一...
    開(kāi)封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天狡恬,我揣著相機(jī)與錄音,去河邊找鬼俯萎。 笑死傲宜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夫啊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辆憔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼撇眯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起虱咧,我...
    開(kāi)封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熊榛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后腕巡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玄坦,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绘沉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煎楣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡车伞,死狀恐怖择懂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情另玖,我是刑警寧澤困曙,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谦去,受9級(jí)特大地震影響慷丽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳄哭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一要糊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窃诉,春花似錦杨耙、人聲如沸赤套。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)容握。三九已至,卻和暖如春车柠,著一層夾襖步出監(jiān)牢的瞬間剔氏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工竹祷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谈跛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓塑陵,卻偏偏與公主長(zhǎng)得像感憾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子令花,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 遞歸實(shí)現(xiàn)二叉樹(shù)的遍歷 class BinaryTree{ public int value; pu...
    BrianAguilar閱讀 681評(píng)論 1 2
  • 姓名: 李小娜 [嵌牛導(dǎo)讀] :這篇文章主要介紹了Java二叉排序樹(shù)阻桅,包括二叉排序樹(shù)的定義、二叉排序樹(shù)的性質(zhì)兼都、二叉...
    n184閱讀 630評(píng)論 0 0
  • 二叉樹(shù)的定義 二叉樹(shù)(binary tree)是結(jié)點(diǎn)的有限集合嫂沉,這個(gè)集合或者空,或者由一個(gè)根及兩個(gè)互不相交的稱為這...
    飄顏閱讀 431評(píng)論 0 2
  • 12月28日 晴朗多寒 當(dāng)我在本子上劃出“山間清流”四個(gè)大字時(shí)扮碧,我覺(jué)得這是那么自然趟章,像是早就存...
    楓芒閱讀 264評(píng)論 0 0
  • 昨天看了一個(gè)演講,對(duì)我觸動(dòng)很大慎王。一個(gè)身體不健全的人如何從零做到千萬(wàn)的營(yíng)業(yè)額蚓土,經(jīng)歷幾沉幾浮,我在想一個(gè)人究竟有多大的...
    藍(lán)色孤楓閱讀 237評(píng)論 0 1