1樓:匿名使用者
#include
#include
#include
#include
typedef char elemtype;
char str[256]; //存放字元型二叉樹
int sk=1;
// 二叉樹(二叉)連結串列的儲存結構
typedef struct bitnode
*bitree;
// 鏈棧(佇列)型別
typedef struct snode
*linkstack;
// 構造一個帶頭結點的空鏈棧(佇列)s
int stackinit(linkstack &s)
//stackinit
// 向鏈棧s的棧頂壓入一個新的資料元素tdata
//push
// 彈出鏈棧s中的棧頂元素,並用tdata返回
else tdata=null;
}//pop
// 向鏈佇列s插入新的資料元素tdata和tlevel
//qinsert
// 刪除鏈佇列s中的隊首元素,並用tdata和tlevel返回
else
}//pop
// 判斷字元s1是否屬於資料元素值域
int bitreeelemtypes(char s1)
//bitreeelemtypes
// 判斷兩個運算子的大小:> 1,= 0,< -1
int inoperator(elemtype s1,elemtype s2)
//inoperator
// 去掉二叉樹字串中不符合要求的字元
void bitreestring(char *st)
++j;
ch=st[j];
}st[k]='\0';
j=k=0;
ch=st[0];
str[0]=' ';
while(ch && ch!=';')
str[k+1]='\0';
}//bitreestring
// 構造一個帶頭結點的空二叉樹連結串列t
int bitreeinit(bitree &t)
//bitreeinit
// 根據字串型二叉樹建立二叉樹連結串列t的儲存結構(遞迴演算法)
void bitreecreate(bitree &t)
else if(ch=='(' && str[sk+1]==',') sk+=2;
else if(ch==',' && str[sk+1]==')'||ch=='(') ++sk;
else if(ch==')'||ch==',')
ch=str[sk];
}}//bitreecreate
// 根據層序輸入建立二叉樹連結串列t的儲存結構(非遞迴演算法)
// 輸入結點值:無左或右孩子時輸入空格,輸入#或;結束
void bitreecreatel(bitree tl)
qinsert(s,q,1);
qinsert(s,q,2);
n=' ';
while(n==' ')
}free(s);
s->next=null;
}//bitreecreatel
//訪問結點p的描述函式
void visit(bitree p)
//visit
// 根據二叉樹連結串列輸出字串型二叉樹t
void bitreeprints(bitree t)
else
if(t->rchild)
while(!t->rchild)
}//bitreeprints
// 根據二叉樹連結串列求二叉樹t的深度(高度)
int bitreedepth(bitree t)
//bitreedepth
// 根據字串型二叉樹求二叉樹t的深度(高度)
int bitreedepths(char *st)
if(ch==')') --i;
++k;
ch=st[k];
}return j+1;
}//bitreedepths
// 將二叉樹連結串列t中所有值為x的資料元素都替換為y
//bitreereplace
// 求二叉樹連結串列t中值為x的資料元素所在的層次
int bitreelevel(bitree t,elemtype x)
if(t->rchild)
return 0;
}//bitreelevel
// 在二叉樹t中查詢資料元素x的遞迴演算法(查詢成功時返回該結點的指標)
bitree bitreesearch(bitree t, elemtype x)
if(t->rchild)
return null; //查詢失敗出口
}//bitreesearch
// 先序遍歷二叉樹t的遞迴演算法
void preorder(bitree t)
//preorder
// 先序遍歷二叉樹t的非遞迴演算法
void preorders(bitree t)
visit(p);
while(p && !p->rchild) pop(s,p);
if(p && p->rchild) p=p->rchild;
}}//preorders
// 中序遍歷二叉樹t的遞迴演算法
void inorder(bitree t)
//inorder
// 中序遍歷二叉樹t的非遞迴演算法
void inorders(bitree t)
visit(p);
while(p && !p->rchild)
if(p && p->rchild) p=p->rchild;
}}//inorders
// 後序遍歷二叉樹t的遞迴演算法
void postorder(bitree t)
//postorder
// 後序遍歷二叉樹t的非遞迴演算法
void postorders(bitree t)
while(p && !p->rchild)
pop(l,p);
}if(p && p->rchild)
}}//postorders
// 層序遍歷二叉樹連結串列t的非遞迴演算法
void levelorders(bitree t)
}//levelorders
// 分層輸出二叉樹連結串列t的非遞迴演算法
void bitreelevel(bitree t)
visit(p);
if(p->lchild) qinsert(s,p->lchild,k+1);
if(p->rchild) qinsert(s,p->rchild,k+1);
qdelete(s,p,ln);
}}//bitreelevel
// 先序後繼線索化二叉樹tl的非遞迴演算法
void preordert(bitree tl)
if(p->rchild) p=p->rchild;
else
if(p && p->rchild)}}
}}//preordert
// 輸出先序後繼線索化二叉樹tl的資料元素值
void preorderprint(bitree tl)
}//preorderprint
void main()
2樓:燕石傳說
//二叉樹的建立及輸出
#include
#include
using namespace std;
#define overflow 0
#define null 0
#define ok 1
typedef int status;
typedef char elemtype;
typedef struct bitree
bitree,*binary_tree;
//建立一個二叉樹
return ok;
}//先遍歷二叉樹
status preshowbitree(binary_tree t)
return ok;
}//中遍歷二叉樹
status midshowbitree(binary_tree t)
return ok;
}//後遍歷二叉樹
status behshowbitree(binary_tree t)
return ok;
}int main()
二叉樹的層次遍歷演算法,二叉樹層次遍歷怎麼進行?
建立一個佇列q 將根放入佇列 while 佇列非空 求用c語言實現二叉樹層次遍歷的遞迴演算法,謝謝!二叉樹層次遍歷怎麼進行?設計一個演算法層序遍歷二叉樹 同一層從左到右訪問 思想 用一個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。void hierarchybitree bitree root...
c 怎麼建立資料結構中的二叉樹?還有二叉樹怎麼線索化
這個東西bai建議你去看看資料du結構中的二叉樹。zhi在c 的daostl 基礎類庫 裡是有提供直接創內建二叉樹的庫文容件的。你直接呼叫就好了。線索化也分為前序,中序,後序三種 與遍歷順序相同 二叉樹的線索化用如下方法 每個結點有五個部分 leftflag leftchild,data right...
用前序非遞迴遍歷二叉樹求樹中葉節點個數
include include define stack init size 100 define stackincrement 10typedef struct bitnodebitnode,bitree 樹的資料結構typedef struct sqstacksqstack 棧的資料結構 voi...