C语言森林转换成二叉树和二叉树转换成森林等的递归算法。
(1) 树的先序遍历算法:
代码:
Status PreOrderTraverseTree(GenTree tree, void (*Visit)(TElemType data)){
if(!tree) return OK;
Visit(tree->data); //访问根结点
for(i = 0; i < MAX_DEGREE; i++){ //先序遍历每个子树
if(tree->childs[i]) PreOrderTraverseTree(tree->childs[i], Visit);
}
return OK;
}
(2)树的后序遍历算法:
代码:
Status PostOrderTraverseTree(GenTree tree, void (*Visit)(TElemType data)){
if(!tree) return OK;
for(i = 0; i < MAX_DEGREE; i++){ //后序遍历每个子树
if(tree->childs[i]){
PostOrderTraverseTree(tree->childs[i], Visit);
}
}
Visit(tree->data); //访问根结点
return OK;
}
(3)森林的先序遍历算法:
先序遍历森林相当于按先序遍历树的方式依次遍历F中的每棵树。
代码:
Status PreOrderTraverseForest(GenTree trees[], int n, void (*Visit)(TElemType data)){
if(n <= 0) return ERROR;
for(i = 0; i < n; i++){
PreOrderTraverseTree(trees[i], Visit);
}
return OK;
}
(4) 森林的中序遍历算法:
中序遍历森林相当于按后序遍历树的方式依次遍历F中的每棵树。
代码:
Status InorderTraverseForest(GenTree trees[], int n, void (*Visit)(TElemType data)){
if(n <= 0) return ERROR;
for(i = 0; i < n; i++){
PostOrderTraverseTree(trees[i], Visit);
}
return OK;
}