二叉樹的非遞迴前序遍歷,需要借助棧(棧又是由順序表實現的)
順序表的實現
首先我們需要乙個二叉樹
通過前序遍歷的陣列"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模擬乙個棧 一般遞迴的非遞迴形式都是以棧來實現的。幾條技巧 如果是後壓棧的...
樹 二叉樹的前序遍歷 非遞迴寫法
今天碰到了這道題,寫一下怎麼實現樹的前序遍歷而不使用遞迴。在我之前的部落格中曾經寫過,雖然遞迴和非遞迴有著緊密的聯絡 比如思想上 但是兩者在編寫上依然有很大差別。主要體現在遞迴可以使用所謂整體法,而如果使用非遞迴的話用整體法很難想。如果使用非遞迴的話怎麼搞呢?我們只能先通過模擬,摸清大概是怎麼做的,...