二叉樹的應用

2021-07-24 16:12:16 字數 2483 閱讀 2461

#include

#include

#define datatype char

#define maxsize 50

#define maxsize 50

int count=0;//統計葉子結點個數

int count1=0;//統計結點個數

typedef

struct nodebitnode,*bitree;

//佇列

typedef

structsequeue;

int emptyqueue(sequeue *sq)

sequeue *initqueue()

int inqueue(sequeue *sq,datatype x)

}int outqueue(sequeue *sq,datatype *x)

}datatype frontqueue(sequeue *sq,datatype *x)

typedef

structseqstack;

seqstack *init_seqstack()

int empty_seqstack(seqstack *s)

int push_seqstack(seqstack *s,bitree x)

}int pop_seqstack(seqstack *s,bitree *x)

}bitree top_seqstack(seqstack *s)

void createbitree(bitree *root)

}void printtree(bitree root,int h)

void preorder(bitree root)

}void inorder(bitree root)

}void postorder(bitree root)

}//先序非遞迴遍歷二叉樹

void preorder2(bitree root)

if(!empty_seqstack(s))}}

//中序非遞迴遍歷二叉樹

void inorder2(bitree root)

if(!empty_seqstack(s))

}}//後序非遞迴遍歷二叉樹

void postorder2(bitree root)

if(!empty_seqstack(s))

else p=p->rchild;

}}}

//求二叉樹的高度

int posttreedepth(bitree root)

}//統計二叉樹中的葉子結點個數並列印出(先序 )

void preorder_count(bitree root)

preorder_count(root->lchild);

preorder_count(root->rchild);

}}//統計二叉樹的結點個數(先序遍歷統計二叉樹中的結點數)

void preorder_count1(bitree root)

}//計算某一k層的葉子結點個數

int leafklevel(bitnode *b,int k)

if(b->rchild!=null)//右孩子進隊

if(front==last)//同層最右節點處理完畢,層數增1

if(level>k)//當層號大於k時返回leaf,不再繼續

return leaf;}}

//遞迴遍歷交換左右子樹

bitree exchange_rootfirlst(bitree t)

}return t;

}//按先序遍歷樹輸出節點及節點的層數

void preorderandlever(bitree root,int h)

} //按層遍歷二叉樹

void visitbyfloor(bitree root)

}根據先序序列和中序遍歷序列,建立二叉樹。輸出這棵二叉樹的後序遍歷序列。

bitnode* creatbypi(char *pre,char *in,int n)

pos=p-in;

s->lchild=creatbypi(pre+1,in,pos);

s->rchild=creatbypi(pre+pos+1,p+1,n-pos-1);

return s;

}//根據中序序列和後序序列,建立二叉樹。輸出這棵二叉樹的先序遍歷序列。

bitnode* creatbyip(char *in,char *post,int n)

pos=p-in;

s->lchild=creatbyip(in,post,pos);

s->rchild=creatbyip(p+1,post+pos,n-pos-1);

return s;

}//求出字串長度

int lengthofstring(char*s)

return count;

}int main()

二叉樹的應用 二叉樹遍歷的應用

在以上討論的遍歷演算法中,訪問結點的資料域資訊,即操作visite bt data 具有更一般的意義,需根據具體問題,對bt 資料進行不同的操作。下面介紹幾個遍歷操作的典型應用。search bt,x 在bt 為二叉樹的根結點指標的二叉樹中查詢資料元素x。查詢成功時返回該結點的指標 查詢失敗時返回空...

二叉樹應用

1 專案要求 建立一棵二叉樹 前序 中序 層次非遞迴遍歷該二叉樹 判斷該二叉樹是否為二叉排序樹 如果是二叉排序樹,進行結點的插入或刪除 輸出結果 2 解題思路 首先設計乙個結構體,確定需要輸入的資料型別,再設計乙個結構體,用來存放左右孩子的指標。輸入資料建立乙個二叉樹,首先輸入左子樹的資料,以 0 ...

二叉樹及其應用 二叉樹遍歷

給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...