二叉樹的非遞迴前序遍歷

2021-09-26 07:29:06 字數 1588 閱讀 1476

二叉樹的非遞迴前序遍歷,需要借助棧(棧又是由順序表實現的)

順序表的實現

首先我們需要乙個二叉樹

通過前序遍歷的陣列"abd##gi##j###ce#hk###f##"構建二叉樹

之前我們已經有二叉樹遞迴版的前序,中序,後序遍歷

通過前序遍歷的陣列"abd##gi##j###ce#hk###f##"構建二叉樹,並得到二叉樹的前序遍歷,中序遍歷,後序遍歷

二叉樹的層序遍歷

二叉樹的層序遍歷

棧的實現

標頭檔案 stack.h

#ifndef _stack_h_

#define _stack_h_

#include #include #include #include "btree.h"

typedef btnode* stdatatype;

typedef struct stack stack;

// 基本增刪查改介面

//初始化

void stackinit(stack* psl, size_t capacity);

//釋放,銷毀函式

void stackdestory(stack* psl);

//檢查是否擴容

void checkcapacity(stack* psl);

//尾插

void stackpush(stack* psl, stdatatype x);

//尾刪

void stackpop(stack* psl);

//返回棧頂資料

stdatatype stacktop(stack* psl);

//判斷棧是否為空

int stackisempty(stack* psl);

#endif //_stack_h_

原始檔 stack.c

#include "stack.h"

#include "btree.h"

//初始化

void stackinit(stack* psl, size_t capicity)

//釋放銷毀函式

void stackdestory(stack* psl)

}//檢查是否擴容

void checkcapacity(stack* psl)

}//尾插,插入資料時記得檢查是否需要擴容

void stackpush(stack* psl, stdatatype x)

//尾刪

void stackpop(stack* psl)

//判斷棧是否為空

int stackisempty(stack* psl)

//返回棧頂資料

stdatatype stacktop(stack* psl)

return psl->array[psl->size - 1];

}//非遞迴前序遍歷

void binarytreeprevordernonr(btnode* root)

if (cur->lchild)

else

} stackdestory(&st);

}

二叉樹的前序非遞迴遍歷

include 二叉樹的先序遞迴遍歷 include include 假定利用陣列a n 順序儲存乙個棧,用top 表示棧頂指標,top 1表示棧空,已知棧未滿,當元素x進棧時的操作為 x b.a top x c.a top x d.a top x top是先 1再運算,所以是從0開始的 而top ...

二叉樹的前序遍歷非遞迴形式

二叉樹的遍歷,所謂的前中後,其實就是根節點相對於左右節點的 訪問時間,前就是根左右,中就是左根右,後就是左右根 遞迴形式的前序遍歷 void presearch treenode head 非遞迴形式的前序遍歷,用vector模擬乙個棧 一般遞迴的非遞迴形式都是以棧來實現的。幾條技巧 如果是後壓棧的...

樹 二叉樹的前序遍歷 非遞迴寫法

今天碰到了這道題,寫一下怎麼實現樹的前序遍歷而不使用遞迴。在我之前的部落格中曾經寫過,雖然遞迴和非遞迴有著緊密的聯絡 比如思想上 但是兩者在編寫上依然有很大差別。主要體現在遞迴可以使用所謂整體法,而如果使用非遞迴的話用整體法很難想。如果使用非遞迴的話怎麼搞呢?我們只能先通過模擬,摸清大概是怎麼做的,...