求二叉數的前序,中序遍歷(leetCode144題,94題)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章