樹的遞迴,非遞迴,層序遍歷

2021-06-28 09:17:54 字數 1090 閱讀 5957



長期以來,很多同學對數的遍歷都有一定的恐懼,其實多練練,多研究,發現是不難的,現在我來把數的構建,遞迴遍歷和非遞迴遍歷為大家整理一下,所有的**均為我自己敲出來的,並且經過了測試,希望給大家乙個參考,若有不足之處,歡迎指出交流。

首先我把數存在陣列中,字子樹為空,則用『#

』代替,根據這個陣列建立二叉樹的,然後分別進行前序,中序,後序的遞迴操作和非遞迴操作,外加層序遍歷**如下:

#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...