通过先序遍历建立链式二叉树

题目:以二叉链表表示二叉树,建立一棵二叉树
思路:通过先序遍历建立链式二叉树

思路是对的,但是在实现的过程中,出现了一些问题。

错误代码:

//结构体
typedef struct BTNode
{
	char data;
	struct BTNode *pLchild;
	struct BTNode *pRchild;
}BTNODE, *BiTree;

int main()
{
	BiTree BT;
	BT = CreateBiTree(BT);
	return 0;
}

//创建链式二叉树
BiTree CreateBiTree(BiTree pBT)
{
	char s;
	scanf("%c", &s);
	if(s == '#')
		pBT = NULL;
	else	//先序遍历
	{
		pBT = (BiTree)malloc(sizeof(BTNODE));
		/*if(pBT == NULL)
		{
			printf("动态内存分配失败,程序终止!");
			exit(-1);
		}*/
		pBT->data = s;
		CreateBiTree(pBT->pLchild);
		CreateBiTree(pBT->pRchild); 
	}
	return pBT;
}

正确代码

//结构体
typedef struct BTNode
{
	char data;
	struct BTNode * pLchild;
	struct BTNode * pRchild;
}BTNODE, *BiTree;

int main()
{
	BiTree BT;
	BT = CreateBiTree();
	return 0;
}

//创建链式结构体
BiTree CreateBiTree()
{
	char ch;
	scanf("%c", &ch);
	BiTree T;
	if(ch == ' ')
	{
		T = NULL;
	}
	else	//先序遍历
	{
		T = (BiTree)malloc(sizeof(BTNODE));
		T->data = ch;
		T->pLchild = CreateBiTree();
		T->pRchild = CreateBiTree();
	}
	return T;
}

在反复更改之后,突然反应过来,我好像一直将一个没有指向性的指针作为参数传参……

你可能感兴趣的:(二叉树,链表,数据结构)