學渣帶你刷Leetcode0105從前序與中序遍歷序列構造二叉樹

題目描述

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

注意:
你可以假設樹中沒有重複的元素。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

白話題目:
 

算法:

 

詳細解釋關注 B站  【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB

C語言完全代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
static struct TreeNode* helper(int* preorder, int preorderSize, int* inorder, int inorderSize,
                               int preorder_index, int inorder_start, int inorder_end)
{
    if (preorder_index > preorderSize - 1 || inorder_start > inorder_end)
    {
        return NULL;
    }

    struct TreeNode* pNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    pNode->val = preorder[preorder_index];
    int index = inorder_start;

    while (index <= inorder_end)
    {
        if (preorder[preorder_index] == inorder[index])
        {
            break;
        }
        index++;
    }

    pNode->left = helper(preorder, preorderSize, inorder, inorderSize,
                         preorder_index + 1, inorder_start, index - 1);
    pNode->right = helper(preorder, preorderSize, inorder, inorderSize,
                          preorder_index + (index - inorder_start + 1), index + 1, inorder_end);

    return pNode;
}

struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
    return helper(preorder, preorderSize, inorder, inorderSize, 0, 0, inorderSize - 1);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章