题解 | #实现二叉树先序,中序和后序遍历#

实现二叉树先序,中序和后序遍历

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;

}

全部评论

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
one_t:硕还是本?什么岗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务