已知二叉樹按照二叉鍊錶方式儲存,利用棧的基本操作寫出先序遍歷非遞迴形式的演算法:
void
pre_order
(bitree root)
;
在遍歷過程中,pre_order函式需要呼叫 visit_node 函式來實現對結點的訪問,該函式宣告如下:
void
visit_node
(bitnode *node)
;
typedef
int datatype;
typedef
struct nodebitnode,
*bitree;
#define stack_size 50
typedef bitnode* elemtype;
typedef
struct
stack;
void
init_stack
(stack *s)
;// 初始化棧
bool push
(stack* s, elemtype x)
;//x 入棧
bool pop
(stack* s, elemtype *px)
;//出棧,元素儲存到px所指的單元,函式返回true,棧為空時返回 false
bool top
(stack* s, elemtype *px)
;//獲取棧頂元素,將其儲存到px所指的單元,函式返回true,棧滿時返回 false
bool is_empty
(stack* s)
;// 棧為空時返回 true,否則返回 false
答案:
非遞迴先序遍歷:
void
pre_order
(bitree root)
//左邊全壓入棧
pop(s,
&t);
t = t->right;
}}
如果有更好的方法或者以上程式有任何錯誤,歡迎討論。 二叉樹非遞迴先序遍歷
二叉樹的遞迴先序遍歷很簡單,假設二叉樹的結點定義如下 1 struct binarytreenode 2 遞迴先序遵循 根 左 右的順序 1 void preorder binarytreenode root 2非遞迴我們以乙個例子說明,仍然以之前博文的乙個二叉樹說明 1 82 36 104 55 ...
非遞迴先序遍歷二叉樹 2
非遞迴先序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...
二叉樹的非遞迴先序,中序遍歷
題目描述 從鍵盤接收擴充套件先序序列,以二叉鍊錶作為儲存結構,建立二叉樹。採取非遞迴方法輸出這棵二叉樹的先序 中序遍歷序列。樣例輸入 abc de g f 樣例輸出 abcdegf cbegdfa 實現 include include define max 100 typedef struct no...