資料結構與演算法 樹的應用

2021-08-14 18:47:49 字數 3305 閱讀 2119

1、以二叉鍊錶作儲存結構,設計求二叉樹高度的演算法。

2、一棵 n 個結點的完全二叉樹用向量作儲存結構,用非遞迴演算法實現對該

二叉樹進行前序遍歷。

3、以二叉鍊錶作儲存結構,編寫非遞迴的前序、中序、後序遍歷演算法。

#include

#include

#define maxsize 100

using namespace std;

typedef struct bitnode

char data;

struct bitnode *lchild,*rchild;

}bitnode,*bitree;

typedef int sqbitree[maxsize];

typedef struct stacknode

char datac;

struct stacknode *next;

}stacknode,*linkstack;

typedef struct stacknode1

bitree data;

struct stacknode1 *next;

}stacknode1,*linkstack1;

void inittree(bitree &t)

t=new bitnode;

t=null;

void initstack(linkstack &s)//

s=new stacknode;

s=null;

void initstack1(linkstack1 &s)//

s=new stacknode1;

s=null;

void build(int *bt,int n)

int x;

cout<<"輸入該完全二叉樹:";

for(int i=1;i<=n;i++)

cin>>x;

bt[i]=x;

//coutchar x;

cin>>x;

if('#'==x)

t=null;

else

t=new bitnode;

t->data=x;

createtree(t->lchild);

createtree(t->rchild);

void push(linkstack &s,char e)

linkstack p=new stacknode;

p->datac=e;

p->next=s;

s=p;

void push1(linkstack1 &s,bitree e)

linkstack1 p=new stacknode1;

p->data=e;

p->next=s;

s=p;

int pop(linkstack &s)

linkstack p=new stacknode;

if(s==null)

cout<<"棧為空";

p=s;

s=s->next;

delete p;

void pop1(linkstack1 &s,bitree &e)

linkstack1 p=new stacknode1;

if(s==null)

cout<<"棧為空";

return;

p=s;

e=p->data;

s=s->next;

//return p->data;

delete p;

int stacksize(linkstack1 s)

int i=0;

while(s)

i++;

s=s->next;

return i;

int gettop(linkstack &s)

if(s!=null)

return s->datac;

bitree gettop1(linkstack1 &s)

if(s!=null)

return s->data;

int emptystack(linkstack &s)

if(s==null)

return 1;

else

return 0;

int emptystack1(linkstack1 &s)

if(s==null)

return 1;

else

return 0;

int deepth(bitree &t)

int deep1,deep2;

if(t==null)

return 0;

else

deep1=deepth(t->lchild);

deep2=deepth(t->rchild);

if(deep1>deep2)

return (deep1+1);

else

return (deep2+1);

void order1(bitree &t)

linkstack1 s;

bitnode *p=t;

initstack1(s);

//p=new bitnode;

//p=t;

while(p||!emptystack1(s))

while(p)

coutpush1(s,p);

p=p->lchild;

if(!emptystack1(s))

pop1(s,p);

p=p->rchild;

void order2(bitree &t)

linkstack1 s;

bitnode *p=t;

initstack1(s);

//p=new bitnode;

//p=t;

//棧不空或者p不空時迴圈

while(p||!emptystack1(s))//while

void order3(bitree &t)

int flag[20];

linkstack1 s;

bitnode *p;

initstack1(s);

p=new bitnode;

p=t;

if(!p)

cout<<"空樹!\n";

while(p||!emptystack1(s))

while(p)

push1(s,p);

flag[stacksize(s)]=0;

p=p->lchild;

while(!emptystack1(s))while(t!=3);

資料結構與演算法基礎 樹的應用

樹這一資料結構學的差不多了,該拉出來練練了。本節學習幾個樹的應用,包括優先佇列 huffman編碼等。優先佇列是特殊的 佇列 取出元素的順序是依照元素的優先權大小,而不是元素進入佇列的順序。優先佇列要求保證 最優先元素先出 的原則。優先佇列支援兩種操作 刪除最大元素 或最小元素 和插入元素。我們將看...

資料結構與演算法 樹

後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...

演算法與資料結構 樹

搜尋 如上圖所示 圓圈代表結點,連線結點的線代表邊。樹由結點和連線結點的邊組成。2 有根結點的父子關係 如圖根結點為0,連線根結點0到結點4最後一條邊連線著結點1和4,則結點1稱為結點4的父節點,結點4 為結點1 的子節點。結點2,3為結點4的兄弟結點。3 根結點 沒有父節點的結點 唯一 外部結點 ...