二叉樹的所有操作

2022-09-06 23:12:33 字數 3024 閱讀 7915

#include#include

#include

using

namespace

std;

#define maxsize 100

#define maxwidth 40typedef

char

elemtype;

typedef

struct

node2

btnode;

void createbtnode(btnode *&b,char *str)//

由str串建立二叉鏈}}

j++;

ch=str[j];

}}void createbitree(btnode *&t)//

先序產生二叉樹

}btnode *createbt1(char *pre,char *in,int n)//

由先序和中序遍歷序列構造二叉樹

btnode *createbt2(char *post,char *in,int n,int m)//

由中序和後序遍歷序列構造二叉樹

}s=(btnode *)malloc(sizeof(btnode));//

建立二叉樹結點*s

s->data=post[maxpost];

s->lchild=createbt2(post,in

,maxin,m);

s->rchild=createbt2(post,maxp+1,n-maxin-1

,m);

returns;}

void displeaf(btnode *b)

//輸出一顆給二叉樹放入所有葉子結點

}}btnode*insertleftnode(btnode *p,char x)//

左結點插入

btnode*insertrightnode(btnode *p,char x)//

右結點插入

btnode *dleteleafttree(btnode *p)//

刪除左結點

btnode *dleterighttree(btnode *p)//

刪除右結點

btnode *searchnode(btnode *b,char x)//

查詢結點

}btnode *lchildnode(btnode *p)//

查詢左子樹結點

btnode *rchildnode(btnode *p)//

查詢右子樹結點

int bitreedepth(btnode *b)//

求高度}

void dispbitree(btnode *b)//

輸出二叉樹

printf(")

");}

}}void dispbtnode1(btnode *b)//

以凹入表示法輸出一顆二叉樹

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

其中n為顯示場寬,字元以右對齊顯示

printf("");

printf(

"%c(%c)

",p->data,type);

for(i=n+1;i<=maxwidth;i+=2

) printf("--

");printf("\n

");top--;

if(p->rchild!=null)

if(p->lchild!=null)}}

}void preorder(btnode *p)//

先序遍歷二叉樹

}void preorder1(btnode *b)//

先序遍歷的非遞迴演算法

if(p->lchild!=null)//

左孩子入桟

}printf("\n

");}

}void inorder(btnode *p)//

中序遍歷二叉樹

}void inorder1(btnode *b)//

中序遍歷的非遞迴演算法

if(top>-1

)

}printf("\n

");}

}void postorder(btnode *p)//

後序遍歷二叉樹

}void postorder1(btnode *b)//

後序遍歷的非遞迴演算法

p=null;//

p指向當前結點的前乙個訪問的結點

flag=1;//

設定b的訪問標記為已訪問過

while(top!=-1&&flag)

else}}

while(top!=-1

); printf("\n

");}

}void tr**level(btnode *b)//

層次遍歷

if(b->rchild!=null)//

輸出右孩子,併入佇列

}printf("\n

");}void intongji(btnode *t,int &m,int &n)//

中序遍歷的方法求葉子結點的個數

}int countleaf(btnode *t)//

返回二叉樹所有葉子結點個數

}int count(btnode *t)//

返回二叉樹所有結點個數

}btnode *gettreenode(char item,btnode*lptr,btnode *rptr)

//其資料域為item,左指標域為lptr,右指標域為rptr

btnode *copytree(btnode *t)

btnode*destorytree(btnode *&t)

void

output()

void

mainpp()

intmain()

printf(

"繼續執行嗎y(1)/n(0): ");

scanf("%d

",&k);

if(!k)return0;

}return0;

}

二叉樹 二叉樹的相關操作

遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...

二叉樹操作

最近在溫習資料結構,把書中的 寫了一遍,下面是二叉樹的基本操作,包括 1 四種遍歷二叉樹的方法 前序遍歷 中序遍歷 後序遍歷和層序遍歷,其中又包括了遞迴的和非遞迴 2 兩種建立二叉樹的方法 根據二叉樹的前序和中序序列建立二叉樹和根據二叉樹的中序後序序列建立二叉樹。1.二叉樹的儲存結構 headfil...

二叉樹操作

本文章主要包括了以下內容 建立二叉樹類。二叉樹的儲存結構使用鍊錶。供操作 前序遍歷 中序遍歷 後序遍歷 層次遍歷 計算二叉樹結點數目 計算二叉樹高度。接收鍵盤錄入的二叉樹前序序列和中序序列 各元素各不相同 輸出該二叉樹的後序序列。下面是c include include include using ...