利用棧中序遍歷二叉樹

2021-07-03 01:25:35 字數 1531 閱讀 7260

//線序建立二叉樹,然後利用棧中序遍歷 

#include"stdlib.h"

#include"stdio.h"

#include"iostream.h"

//***********二叉樹的遍歷***********

typedef char telemtype;

#define true 1

#define false 0

#define stack_init_size 10

#define stackincrement 2

#define ok 1

#define error 0

#define overflow -2

//typedef int selemtype;

typedef int status;

//定義二叉樹及結點結構

typedef struct bitnode

bitnode,*bitree;

typedef bitree selemtype;

//定義順序棧的結構;

typedef struct sqstack

sqstack;

//初始化乙個空棧;

status initstack(sqstack *s)

//資料元素入棧;

status push(sqstack *s,selemtype e)

*((*s).top)++ = e; 

return ok; 

}//資料元素出棧;

status pop(sqstack *s,selemtype *e)

//判斷乙個棧是否為空;

status stackempty(sqstack s)

//銷毀乙個棧;

status destroystack(sqstack *s)

//取棧頂的資料元素;

status gettop(sqstack s,selemtype *e)

else 

return error; 

}//建立一棵空的二叉樹

status initbitree(bitree *t)

//銷毀二叉樹

void destroybitree(bitree *t)

}//構造一棵二叉樹

void createbitree(bitree *t)

//輸出二叉樹的結點

status visitt(telemtype e)

//利用棧對二叉樹進行中序遍歷

status stackinordervisit(bitree t,status(*visit)(telemtype))

pop(&s,&t);

visit(t->data);

if(t->rchild)

}return ok;

}//主函式

void main()

//執行結果:

先序建立一棵樹:

請輸入乙個結點(0表示為空)

dba00c00fe00g00

abcdefg

二叉樹中序遍歷

訪問根結點的的左子樹,訪問根結點和訪問根結點的右子樹依次記作 l,d r 中序遍歷 ldr 演算法 遍歷根結點的左子樹,訪問根結點 遍歷根結點的右子樹 對於上面的圖,我們假定只有a,b,c三個結點,則中序遍歷結果為 b a c 採用上節 二叉樹鏈式儲存和前序遍歷 中的遞迴推演 db a c d b ...

二叉樹中序遍歷

二叉樹中序遍歷 非遞迴版本的中序遍歷用棧來實現。乙個元素出現在棧頂一次,這一次會被處理並出棧。trick 用乙個指標去記錄當前節點cur,如果cur left左側還未遍歷,就會將cur入棧並訪問cur left。一行很重要的 是cur cur right,這一句之後如果cur null,則說明棧頂元...

二叉樹先序遍歷和中序遍歷確定二叉樹

由於希望得到一顆二叉樹,所以返回值型別是乙個指向根節點的指標 表示得到了一顆二叉樹 btnode creatbt char pre,char int,int l1,int r1,int l2,int r2 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...