資料結構二叉樹的遍歷,C語言資料結構 二叉樹的遍歷

2021-08-06 01:17:39 字數 4687 閱讀 1872

1樓:匿名使用者

前序:根,左兒子,右兒子

中序:左兒子,根,右兒子

後序:左兒子,右兒子,根

首先是要牢記一上幾句話

比如這棵樹的中許遍歷,a有左兒子,先不訪問a,以此類推,直到d沒有左兒子,訪問d,然後訪問d的根b,然後應該訪問b的右兒子,但是b沒有,所以訪問b的根a,訪問完a以後訪問a的右子樹。先看c,c有左兒子,所以先不訪問c,看c的左兒子e,e沒有左兒子,所以訪問e,然後e的根c,然後c的右兒子f

後序遍歷與這個原理一樣,只是訪問順序不同,自己看看,不懂再吧

2樓:

知道先序(根左右)和中序(左根右),可求後序(左右根);知道中序和後序,可求先序;知道先序後序,求出的2叉樹不唯一。這些書上都講過。根據這些推。

32.b

33.a

34.d 首先確定根結點是c,該2叉樹根結點無右子樹,然後後序只剩下dabe了,中序為deba,

e,又確定e為根,而中序的左邊只有d,所以e的左孩子是d,所以中序右邊只剩ba沒確定了。

而後序則是ab,所以能確定a是b的右孩子。

35.b

其它的都按照這樣推,就ok

只要記住先序(根左右)中序(左根右)後序(左右根).就行。

c語言資料結構-二叉樹的遍歷

3樓:夏天的小紅花

np[i]->lchild=np[i]->rchild=(void*)0

它的意思就是:

np[i]->lchild=np[i]->rchild=null

資料結構二叉樹怎麼遍歷啊??

4樓:巴伐利亞巨人

拿先序遍歷舉例: 先序遍歷 是根左

右先遍歷根a,然後遍歷a的左子樹(是版左面那一群),然後遍歷a的右子權樹(為空)。

在a的左子樹中,先遍歷根也就是b,在遍歷b的左子樹也就是c,在遍歷b的右子樹,是右邊的一群。

在b的右子樹中繼續…………

資料結構二叉樹的遍歷問題

計算機,資料結構,二叉樹的遍歷,先序遍歷,後序遍歷,中序遍歷,急急急急急急,跪求高手幫助

5樓:

中序遍歷為abcd,前序遍歷序列為cabd前序遍歷先訪問根,所以c為根,在中序遍歷中先訪問左子樹,再訪問根,最後訪問右子樹,所以在中序序列中,c前面的為左子樹,第二個訪問的是左子樹的根a以此類推可得這樣的一棵二叉樹:

c/ \

a d\b

對這棵二叉樹後序遍歷可得後序序列為badc

請教一下資料結構 二叉樹的先序遍歷 中序遍歷 後序遍歷 是怎麼弄的

6樓:匿名使用者

後序遍歷就是:

後序遍歷左子樹

後序遍歷右子樹

輸出根節點

如圖舉例就是:

左子樹為bde三個節點

。。左子樹的左子樹為d

。。左子樹的右子樹為e

。。左子樹的根為b

左子樹後序遍歷為deb。

右子樹為fc兩個節點

。。右子樹的左子樹不存在

。。右子樹的右子樹為f

。。右子樹的根為c

右子樹後序遍歷為fc

整個樹的根為a

所以就是 debfca

7樓:孤鬆獨海

無論是先中後序遍歷,對於子節點都是先左節點後右節點的,後序遍歷是先遍歷子節點,

則開始找a的左邊,再找b的左邊 d 右邊e 接著b 這樣a的左邊遍歷完 再遍歷右邊先遍歷c的子節點f 再c 最後根節點a 則就是debfca

8樓:匿名使用者

以下是關於二叉樹操作的11個簡單演算法 */ /****/ struct btreenode{ 中序遍歷 */ inorder(bt); printf(

9樓:

先序遍歷 根左右abdecf

中序遍歷 左根右dbeacf

後序遍歷 左右根debfca

後序,你先看左枝,最左面的是d,接著在d右邊的是e,而d和e是b的分支,按照“左右根”的順序,就是deb,然後以此類推,看a的右分支,f是c的右分支,寫下來就是fc,然後再根據“左右根”,結果就是debfca

10樓:老馮文庫

所謂先序、中序和後序的區別在於訪問根的時機,分別是blr、lbr和lrb,其中b、l、r分別表示根結點、根結點的左子樹和根結點的右子樹。

以後序遍歷為例進行講解。

後序遍歷演算法:

(1) 後序遍歷根結點的左子樹;

(2) 後序遍歷根結點的右子樹。

(3) 訪問二叉樹的根結點;

你的方法是將樹分解為根、左子樹、右子樹,再將子樹繼續按前述方法分解,直至每一部分只剩一個結點或空為止。

對該圖,分解為

根(a),根的左子樹(bde,不分先後),根的右子樹(cf,不分先後)

故後序的基本順序是(bde)、(cf)、(a)同樣的道理,對(bde)和(cf)也進行分解:

根(b)、左子樹(d)、右子樹(e) 後序的基本順序是deb根(c)、左子樹(空)、右子樹(f) 後序的基本順序是fc整合起來就是:d e b f c a

11樓:匿名使用者

後序遍歷是:左、右、根

即,先遍歷左結點,再遍歷右結點,再遍歷根結點根據你的圖

先遍歷a的左結點,由於a的左結點b還有左結點,所以就先遍歷到d了,然後就是b的右結點

演算法可以如下設計:

void postorder(btnode *r)}

中序遞迴遍歷二叉樹的演算法?(資料結構)

12樓:匿名使用者

#include

#include

#define maxsize 100

typedef char elemtype;

typedef struct node

bitnode;

}}j++;

ch=str[j];}}

bitnode *find(bitnode *b,elemtype x)

}bitnode *lchild(bitnode *b)bitnode *rchild(bitnode *b)int bitreedepth(bitnode *b)void visit(char ch)

/*先序遍歷二叉樹*/

void preorder(bitnode *b)}/*中序遍歷二叉樹*/

void inorder(bitnode *b)}/* 後序遍歷二叉樹*/

void postorder(bitnode *b)} void main()

printf("\n");

printf("(3)二叉樹b的深度為:%d\n",bitreedepth(b));

printf("(4)先序遍歷序列為:");

preorder(b);

printf("\n(5)中序遍歷序列為:");

inorder(b);

printf("\n(6)後序遍歷序列為:");

postorder(b);

printf("\n");}

13樓:呆啊呆啊呆

seek( 某一節點)

14樓:匿名使用者

#include

using namespace std;

#include

#include

#include

#define maxsize 20 //最大結點個數

//#define n 14 //必須輸入結點個數(包含虛結點)

#define m 10 //最大深度

typedef struct nodebitree;

bitree*q[maxsize];

bitree*creatree()

rear++;

q[rear]=s;

if(rear==1)

else

else

if(rear%2==1)

front++;

}//i++;

cin>>ch;

}return t;

}int countleaf(bitree* t)

int treedepth(bitree *t)

}void output(bitree*t) //輸出列印二叉數

cout

output(t->lchild );}}

int menu_select( )

return sn;

} int main( )

}return 0;

} /*void main()*/

15樓:匿名使用者

void inorder ( bitptr t )}

中序遞迴遍歷二叉樹的演算法?(資料結構)

include include define maxsize 100 typedef char elemtype typedef struct node bitnode j ch str j bitnode find bitnode b,elemtype x bitnode lchild bitno...

資料結構中二叉樹如何轉化成深林

將一棵二叉樹還原為樹或森林,具體方法如下 1 若某結點是其雙親的左孩子,則把該結點的右孩子 右孩子的右孩子 都與該結點的雙親結點用線連起來。2 刪掉原二叉樹中所有雙親結點與右孩子結點的連線。3 整理由 1 2 兩步所得到的樹或森林,使之結構層次分明。v 需要規定一下,比如左子樹是兒子,右子樹是弟弟,...

資料結構樹和二叉樹轉換時樹有分左右子樹嗎

樹中乙個結點只有乙個孩子,這個孩子不分左右,是第一棵子樹 資料結構樹轉換為二叉樹時,樹有分左右子樹嗎?樹也分,左邊的是第乙個孩子,其他的各個孩子順次接在結點的右子樹 資料結構與演算法 二叉樹交換左右子樹演算法 傳入樹的根結點即可 exchangelr root root為樹的根節點 void exc...