怎麼把二叉樹遍歷用結構的形式輸出

2021-06-13 06:37:00 字數 4618 閱讀 4862

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...