leetcode做题笔记105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

思路一:递归

struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
    if(preorderSize==0)return NULL;

    struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    int index;
    root->val=preorder[0];
    for(index=0;indexleft=buildTree(preorder+1,index,inorder,index);
    root->right=buildTree(preorder+index+1,preorderSize-index-1,inorder+index+1,preorderSize-index-1);
    return root;
}

分析:

本题要通过二叉树的前序遍历和中序遍历来构造二叉树,根据前序遍历先输出根节点,再输出左子树,右子树,中序遍历先输出左子树,再输出根节点,右子树,可以锁定根节点,再利用递归构造二叉树的左右子树得到答案

总结:

本题考察二叉树构造问题,理解二叉树前序遍历和中序遍历再利用递归即可做出

你可能感兴趣的:(leetcode,笔记,算法)