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...中序遞迴遍歷二叉樹的演算法?(資料結構)
資料結構中二叉樹如何轉化成深林
資料結構樹和二叉樹轉換時樹有分左右子樹嗎