数据结构复习总结
森林相关问题函数(持更)
- 求森林的叶子节点数
- 树转化为二叉树
- 求森林的高度
- 层次遍历输出森林中节点的值和层数
struct tnode { //树结构结点类型
struct tnode *firstson, *nextbrother; // 指示第一个孩子和下一个兄弟的指针
char data; // 数据字段
};
typedef struct tnode * tree; // 树结构指针类型
struct bnode {
struct bnode * lchild, * rchild;
char data;
};
typedef bnode * bitre;
1. 求森林的叶子节点数
int leaf(tree t){
if (t == NULL) return 0;
else {
if (t->firstson==NULL) return 1 + leaf(t->nextbrother);
else return leaf(t->nextbrother) + leaf(t->firstson);
}
}
2.树转化为二叉树
bitre solve(tree t){
bitre T=new bnode;
if(t==NULL) T=NULL;
else{
T->data=t->data;
T->lchild=solve(t->firstson);
T->rchild=solve(t->nextbrother);
}
return T;
}
3. 求森林的高度
int solve(tree t){
if(t) return max(solve(t->firstson)+1,solve(t->nextbrother));
else return 0;
}
4. 层次遍历森林
void solve(tree t){
int height = 1;
queue<tree> st;
st.push(t);
tree s=new tnode;
while(!st.empty()){
int len=st.size(); //队列的长度代表上一层有几个分支
for(int i=0;i<len;i++){
s=st.front();
st.pop();
while(s){
cout<<s->data<<" "<<height<<endl;
if(s->firstson)
st.push(s->firstson);
s=s->nextbrother;
}
}
height++; //该层循环完毕,高度加一
}
}