核心思想:根節點和左孩子直接遍歷,若有右孩子,則入棧。沒有左右孩子,直接出棧頂元素。
#ifndef _btree_h_
#define _btree_h_
typedef char btdatatype;
typedef struct binarytreenodebtnode;
void binarytreedestory(btnode* root);
void binarytreeprevordernonr(btnode* root);
#endif/*_btree_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 stackpush(stack* psl, stdatatype x);
void stackpop(stack* psl);
stdatatype stacktop(stack* psl);
int stackisempty(stack* psl);
#endif //_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 stackpush(stack* psl, stdatatype x);
void stackpop(stack* psl);
stdatatype stacktop(stack* psl);
int stackisempty(stack* psl);
#endif //_stack_h_
#include"btree.h"
#include"stack.h"
#include#includevoid binarytreeprevordernonr(btnode* root)//用非遞迴(棧)實現前序遍歷
if (cur->lchild)//直接遍歷左孩子
else
}stackdestory(&st);
}
#include "btree.h"
#include "queue.h"
#include "stack.h"
int main()
遞迴和非遞迴實現二叉樹前序遍歷
1.前序遍歷就是根 左 右,按著這個順序,先說遞迴實現 建立node節點 public class node public int getdata public node getleft public node getright 初始化資料 public static node init 遞迴實現 ...
二叉樹前序遍歷(遞迴以及非遞迴)
對於一種資料結構而言,我們最常見的就是遍歷,那麼關於二叉樹我們該如何去遍歷呢?請看大螢幕 上圖是一棵二叉樹,前序遍歷結果 1 2 4 5 3 6 咦,我想你可能會疑惑什麼叫做前序遍歷,其實很簡單,就是按照 根 左 右 的方式去遍歷二叉樹。definition for a binary tree no...
二叉樹前序遍歷的非遞迴演算法
二叉樹的前序遍歷是先根節點,然後如果有左子樹則再先序遍歷左子樹,然後如果有右子樹則再先序遍歷其又子樹。遞迴演算法如下 複製 如下 void preord程式設計客棧er betree t 當然遞迴演算法是隱式使用了棧。我們仔細分析這個過程,先是取出了根節點進行了訪問,然後我們把根節點退棧,退棧後必然...