長期以來,很多同學對數的遍歷都有一定的恐懼,其實多練練,多研究,發現是不難的,現在我來把數的構建,遞迴遍歷和非遞迴遍歷為大家整理一下,所有的**均為我自己敲出來的,並且經過了測試,希望給大家乙個參考,若有不足之處,歡迎指出交流。
首先我把數存在陣列中,字子樹為空,則用『#
』代替,根據這個陣列建立二叉樹的,然後分別進行前序,中序,後序的遞迴操作和非遞迴操作,外加層序遍歷**如下:
#include
#include
#define maxsize 100
typedef char elemtype;
typedef struct node bitree,*lbitree;
//建立二叉樹
lbitree createtree(char *in, int n ,lbitree t)
c++;
if(in[c]!='#')
c++; }
return t; }
//前序非遞迴
bool preorder(lbitree t) else }
printf("\n");
return true; }
//中序序非遞迴
bool inorder(lbitree t) else }
printf("\n");
return true; }
//後序非遞迴
bool postorder(lbitree t) elseelse }
}printf("\n");
return true; }
//前序遞迴
void preorderbyrecursion(lbitree t) }
//中序遞迴
void inorderbyrecursion(lbitree t) }
//後序遞迴
void postorderbyrecursion(lbitree t) }
//層序
bool levelorder(lbitree t)
while(front!=rear)
return true; }
樹中序遍歷 非遞迴
步驟1 結點的所有路徑情況 如果結點有左子樹,該結點入棧 如果結點沒有左子樹,訪問該結點 如果結點有右子樹,重複步驟1 如果結點沒有右子樹 結點訪問完畢 回退,讓棧頂元素出棧,訪問棧頂元素,並訪問右子樹,重複步驟1 如果棧為空,表示遍歷結束。include iostream include stac...
樹的前中後層序遍歷(遞迴與非遞迴方式)
leetcode的第590題與429 589題型類似,都為樹 不一定是二叉樹 的各種形式的遍歷,因此放在一起總結。對於上圖,要求求出前序遍歷 後序遍歷和層級遍歷的結果。前序遍歷結果 1,3,5,6,2,4 後序遍歷結果 5,6,3,2,4,1 層級遍歷結果 1 3,2,4 5,6 對於樹我們一般有兩...
二叉樹的實現, 遍歷 遞迴, 非遞迴, 層序
include binarytree.h include stack.h include queue.h 通過前序遍歷的陣列 abd e h cf g 構建二叉樹 btnode binarytreecreate btdatatype str,int idx else 二叉樹銷毀 void binar...