根据前序遍历和 '#' 来建立二叉树

仅仅根据前序遍历是不能确实二叉树的 但是用’#‘来表示空 即可确定二叉树
在这里插入图片描述
上图用前序遍历和’#’ 表示的唯一结果为: A B D # # E # H # # C F # # G

typedef struct Result
{
	Node *root;
	int used;
}Result;
Result CreatTree(char pre[], int size)
{
	if (size == 0)
	{
		Result r = { NULL, 0 };
		return r;
	}
	char rootvalue = pre[0];
	if (rootvalue == '#')
	{
		Result r = { NULL, 1 };
		return r;
	}
	Node*root = (Node*)malloc(sizeof(Node));
	root->value = rootvalue;
	Result leftresult = CreatTree(pre + 1, size - 1);
	root->left = leftresult.root;  

	Result rightresult = CreatTree(pre + 1+leftresult.used,
		size - 1-leftresult.used);
	root->right = rightresult.root;

	Result r = { root, 1 + leftresult.used + rightresult.used };
	return r;
}

关系:建立 根 建立左子树 建立右子树
终止条件:size == 0 和’#’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值