69,371
社区成员
发帖
与我相关
我的任务
分享
/* 这个程序给出了与二叉链表相关的一些操作
* 包括二叉树的建立
* 二叉树的前序、中序、后序遍历
*/
#include <stdio.h>
#include <stdlib.h>
/* 二叉链表的结点结构 */
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
/* 对主函数中即将被调用的函数进行声明 */
void CreateBiTree(BiTree tree);
void PreOrderTraverse(BiTree tree);
void InOrderTraverse(BiTree tree);
void PostOrderTraverse(BiTree tree);
int main(void)
{
BiTree tree;
/* 建立二叉树 */
CreateBiTree(tree);
/* 二叉树的前序遍历 */
PreOrderTraverse(tree);
printf("\n");
/* 二叉树的中序遍历 */
InOrderTraverse(tree);
printf("\n");
/* 二叉树的后序遍历 */
PostOrderTraverse(tree);
printf("\n");
return 0;
}
/* 递归的前序遍历的方法建立二叉树 */
void CreateBiTree(BiTree tree)
{
TElemType ch;
int i;
printf("Enter the data of the node: ");
do
{
scanf("%c", &ch);
} while(ch == '\n');
if(ch == '#')
tree = NULL;
else
{
tree = (BiTree) malloc (sizeof(BiTNode));
if (!tree)
{
printf("OVERFLOW !\n");
exit(1);
}
tree->data = ch;
CreateBiTree(tree->lchild);
CreateBiTree(tree->rchild);
}
}
/* 递归实现二叉树的前序遍历 */
void PreOrderTraverse(BiTree tree)
{
if (tree == NULL)
return;
printf("%3c", tree->data);
PreOrderTraverse(tree->lchild);
PreOrderTraverse(tree->rchild);
}
/* 递归实现二叉树的中序遍历 */
void InOrderTraverse(BiTree tree)
{
if (tree == NULL)
return;
InOrderTraverse(tree->lchild);
printf("%3c", tree->data);
InOrderTraverse(tree->rchild);
}
/* 递归实现二叉树的后序遍历 */
void PostOrderTraverse(BiTree tree)
{
if (tree == NULL)
return;
PostOrderTraverse(tree->lchild);
PostOrderTraverse(tree->rchild);
printf("%3c", tree->data);
}
void CreateBiTree(BiTree tree)//tree是个值参
{
……
tree = (BiTree) malloc (sizeof(BiTNode));//malloc分配的内存块如何交到父节点手中?
if(ch == '#')
tree = NULL;
输入#号