/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
* @return int* returnSize 返回数组行数
* @return int** returnColumnSizes 返回数组列数
*/
// 递归函数:前序遍历
#include <stdlib.h>
void preOrder(struct TreeNode* root, int* result, int* index) {
if (root == NULL) {
return;
}
result[(*index)++] = root->val;
preOrder(root->left, result, index);
preOrder(root->right, result, index);
}
// 递归函数:中序遍历
void inOrder(struct TreeNode* root, int* result, int* index) {
if (root == NULL) {
return;
}
inOrder(root->left, result, index); // 先递归遍历左子树
result[(*index)++] = root->val; // 然后访问根节点
inOrder(root->right, result, index); // 最后递归遍历右子树
}
// 递归函数:后序遍历
void postOrder(struct TreeNode* root, int* result, int* index) {
if (root == NULL) {
return;
}
postOrder(root->left, result, index); // 先递归遍历左子树
postOrder(root->right, result, index); // 再递归遍历右子树
result[(*index)++] = root->val; // 最后访问根节点
}
// 主函数:按照二叉树前序、中序和后序打印所有的节点
int** threeOrders(struct TreeNode* root, int* returnSize,
int** returnColumnSizes) {
// 创建存储结果的二维数组
int** result = (int**)malloc(3 * sizeof(int*));
result[0] = (int*)malloc(1001 * sizeof(int));
result[1] = (int*)malloc(1001 * sizeof(int));
result[2] = (int*)malloc(1001 * sizeof(int));
// 初始化结果行数
*returnSize = 3;
*returnColumnSizes = (int*)malloc(3 * sizeof(int));
// 记录遍历的节点数
int preIndex = 0, inIndex = 0, postIndex = 0;
// 执行前序、中序和后序遍历,并记录结果
preOrder(root, result[0], &preIndex);
inOrder(root, result[1], &inIndex);
postOrder(root, result[2], &postIndex);
(*returnColumnSizes)[0] = preIndex; // 前序结果长度
(*returnColumnSizes)[1] = inIndex; // 中序结果长度
(*returnColumnSizes)[2] = postIndex; // 后序结果长度
// 返回结果
return result;
}