龙空技术网

LeetCode从前序与中序遍历序列构造二叉树105

前端全栈开发 146

前言:

此刻各位老铁们对“先序中序遍历构造二叉树的伪代码”大体比较关注,看官们都想要了解一些“先序中序遍历构造二叉树的伪代码”的相关文章。那么小编也在网络上收集了一些关于“先序中序遍历构造二叉树的伪代码””的相关文章,希望朋友们能喜欢,大家一起来学习一下吧!

需求描述:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其跟结点

解题思路分析:二叉树多用递归,根据先序遍历的特点,可知preorder的第一个数组元素是根节点,知道根节点的值,然后去inorder数组中找到其位置i,其中i之前的元素属于它左子树这一枝,i之后的元素属于它右子树这一枝;可以获取其左子树的中序遍历的长度,可以获取其右子树的中序遍历的长度,得到长度后,再去preorder数组中找到其左子树的先序遍历的长度,其右子树的先序遍历的长度,一直这样递归下去,就能获取完整的二叉树

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; */#pragma mark - 从前序与中序遍历序列构造二叉树struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) {    if(preorderSize ==0 || inorderSize == 0) return NULL;    struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));    root->val = preorder[0];    int i ;    for(i=0;i<inorderSize;i++) {        if(inorder[i] == preorder[0]) break;    }    root->left = buildTree(preorder + 1, i, inorder, i);    root->right = buildTree(preorder + 1 + i, preorderSize - 1 - i, inorder + i + 1, preorderSize - 1 - i);        return root;}

标签: #先序中序遍历构造二叉树的伪代码