//線序建立二叉樹,然後利用棧中序遍歷
#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 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...