資料結構 二叉樹例項分析

2021-06-25 13:20:26 字數 1740 閱讀 8980

#include#include#include#include #include /*自己來看看乙個完整性的二叉樹的例子,加深理解*/

#define max 100

typedef struct bnode/*二叉樹的節點結構*/

bnode;

int e,z,i,j,k;//這是一些常用的變數。

bnode *t,*q,*p;

typedef struct//棧的順序儲存結構

sqstack;

typedef struct//迴圈佇列儲存結構,用於二叉樹的按層次訪問

squeue;

//這個用於建立乙個節點,本來想傳遞乙個引數x作為節點的值,發現這樣不好,值是輸入的,當作函式引數傳遞後遞迴不會用了

bnode *creat_one()//所以通過scanf從緩衝區掃瞄比較好

else

return p;//p所指向的空間是動態申請來的,可以返回。

}void push(sqstack *s,bnode *x)//這是入棧函式,進乙個就指標位置就+1

else

}bnode * pop(sqstack *s)//出棧函式,每次取出乙個棧位置指標減去一

else

return x;//返回取出的棧的元素

}/*佇列處理函式*///這裡是迴圈佇列。省去判斷是否假滿

void enqueue(squeue *q,bnode *x)//把x放在佇列裡面

else

}bnode *delqueue(squeue*q)

else

}/*模仿先序遞迴遍曆法建立二叉樹*/

bnode *creat_bt1()//對比creat_one函式進行的遞迴

return t;}/*非遞迴*///這是根據二叉樹的性質來寫的,關鍵是對性質的理解

/*對於具有n個節點的完全二叉樹,如果按照從上到下和從左到有的順序,

對二叉樹的所有節點從1開始按順序編號 對於任意的序號i的節點有 1.如果i>1,

則序號i的結點的雙親節點的序號是/2 i=1就是根結點無雙親節點 2.如果2i<=n則序號i的結點的左孩子節點的序號是2i,

如果2*i大於n節點無左孩子 3.如果2*i+1<=n序號為i的節點的右孩子的序號2*i+1,否則i的結點無右孩子*/

bnode *creat_bt0()

else else

}printf("\n i data=?");

scanf("%d %d",&i,&e);

} return t;}

/*先根序遍歷*/

void preorder(bnode *p)

}/*中根序遍歷,遞迴*/

void inorder(bnode*p)

}/* 非遞迴中根遍歷*/

void inorder_2(bnode *t)

p=pop(&s); if(s.top!=0)

}}void level(bnode *t)

printf("\n");}

int e,z,i,j,k;bnode *t,*q,*p;

void main()

case 1:

case 2:

case 3:

case 4:

case 5:

exit(0);}}

while(k>=0&&k<=5); printf("再見\n");

}

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...