二叉樹的非遞迴遍歷

2021-10-21 03:58:45 字數 3075 閱讀 9773

stack.h裡面的**:

#pragma once

#include

#include

#define max 1024

//這裡的棧已經知道陣列的最大長度,因此不需要再用在堆區再次開闢一塊記憶體來用二級指標指向

struct sstack

;//隱藏資料,不讓使用者能夠得到操作結構體的介面

//類似c++類中的private屬性

typedef

void

* seqstack;

//初始化棧----返回棧的結構體,為了隱藏資料用萬能指標作為返回值

seqstack init_stack()

;//入棧

void

push_stack

(seqstack stack,

void

* data)

;//出棧:尾刪

void

pop_stack

(seqstack stack)

;//返回棧頂元素

seqstack top_stack

(seqstack stack)

;//返回棧的大小

intsize_stack

(seqstack stack)

;//判斷棧是否為空

bool empty_stack

(seqstack stack)

;//銷毀棧

void

destroy_stack

(seqstack stack)

;

stack.cpp

#include

"stack.h"

//初始化棧----返回棧的結構體,為了隱藏資料用萬能指標作為返回值

seqstack init_stack()

//初始化陣列--清空陣列,一開陣列裡面會有隨機值

memset

(stack->data,

null

,sizeof

(void*)

* max)

;//長度初始哈

stack->size =0;

//返回棧的結構體

return stack;

}//入棧

void

push_stack

(seqstack stack,

void

* data)

//下面從陣列尾部開始插入

mystack->data[mystack->size]

= data;

//長度加一

mystack->size++;}

//出棧:尾刪

void

pop_stack

(seqstack stack)

//返回棧頂元素

seqstack top_stack

(seqstack stack)

//返回棧的大小

intsize_stack

(seqstack stack)

//判斷棧是否為空

bool empty_stack

(seqstack stack)

//銷毀棧

void

destroy_stack

(seqstack stack)

main.cpp

#define _crt_secure_no_warnings

#include

#include

#include

"stack.h"

//二叉樹的非遞迴遍歷

struct binarynode

;void

norecursion

(binarynode* root)

//如果標誌為假,將標誌改為真

ptop->flag =1;

//將該節點右子樹,左子樹和根分布壓入棧中

//如果右子樹為空,就不放入棧中

if(ptop->rchild !=

null

)//如果左子樹為空,就不放入棧中

if(ptop->lchild !=

null

)//放入根

push_stack

(mystack, ptop);}

//銷毀棧

destroy_stack

(mystack);}

void

output()

; binarynode bnode =

; binarynode cnode =

; binarynode dnode =

; binarynode enode =

; binarynode fnode =

; binarynode hnode =

; binarynode gnode =

;//建立關係

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...

非遞迴遍歷二叉樹

中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...