题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
https://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362
/** * 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; }