用非遞迴實現二叉樹前序遍歷(用棧)

2021-09-26 06:57:45 字數 1694 閱讀 4810

核心思想:根節點和左孩子直接遍歷,若有右孩子,則入棧。沒有左右孩子,直接出棧頂元素。

#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 當然遞迴演算法是隱式使用了棧。我們仔細分析這個過程,先是取出了根節點進行了訪問,然後我們把根節點退棧,退棧後必然...