本文主要是介绍[力扣 Hot100]Day47 从前序与中序遍历序列构造二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
出处
思路
根据先序和中序可以划分左右子树,递归构造子树即可。
代码
class Solution {
public:TreeNode* buildSubTree(vector<int>& preorder, vector<int>& inorder, int p_start, int i_start, int i_end) {if(p_start>preorder.size()-1||i_start<0||i_start>i_end) return nullptr;TreeNode* root=new TreeNode(preorder[p_start]);if(i_start==i_end)return root;int i=i_start;while(inorder[i]!=preorder[p_start])i++;root->left = buildSubTree(preorder, inorder, p_start+1, i_start, i-1);root->right = buildSubTree(preorder, inorder,p_start+(i-i_start+1), i+1, i_end);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildSubTree(preorder, inorder,0,0,inorder.size()-1);}
};
这篇关于[力扣 Hot100]Day47 从前序与中序遍历序列构造二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!