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 根結點 沒有父節點的結點 唯一 外部結點 ...