求二叉数的前序,中序遍历(leetCode144题,94题)

本文详细介绍了二叉树的前序遍历和中序遍历算法,通过具体示例解析了遍历过程,包括如何计算二叉树中所有节点的数量,并提供了C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.给定一个二叉树,返回它的前序遍历。

示例 :

输入 : [1, null, 2, 3]
1

2
/
3
输出:[1, 2, 3]

int treeSize(struct TreeNode* root)//求二叉树中所有的结点
{
	if (root == NULL)
		return 0;
	else
		return treeSize(root->left) + treeSize(root->right) + 1;
}

void numpreorder(struct TreeNode* root, int* preorder, int* pnum)//依据先根再左再右的顺序进行遍历
{
	if (root == NULL)
		return;
	preorder[*pnum] = root->val;
	++(*pnum);
	numpreorder(root->left, preorder, pnum);
	numpreorder(root->right, preorder, pnum);
}

int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
	*returnSize = treeSize(root);
	int *preorder = (int*)malloc(*returnSize*sizeof(int));
	int num = 0;
	numpreorder(root, preorder, &num);
	return preorder;
}
2.给定一个二叉树,返回它的中序遍历

输入 : [1, null, 2, 3]
1

2
/
3
输出:[1, 3, 2]

int treeSize(struct TreeNode* root)//求二叉树的所有结点
{
	if (root == NULL)
		return 0;
	else
		return treeSize(root->left) + treeSize(root->right) + 1;
}

void inordernum(struct TreeNode* root, int* inorder, int* pnum)//中序遍历先左再右再根
{
	if (root == NULL)
		return;
	inordernum(root->left, inorder, pnum);

	inorder[*pnum] = root->val;
	++(*pnum);

	inordernum(root->right, inorder, pnum);

}

int* inorderTraversal(struct TreeNode* root, int* returnSize) {
	*returnSize = treeSize(root);
	int* inorder = (int*)malloc((*returnSize)*sizeof(int));
	int num = 0;
	inordernum(root, inorder, &num);
	return inorder;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值