0
点赞
收藏
分享

微信扫一扫

105. 从前序与中序遍历序列构造二叉树(二叉树+遍历)

1kesou 2022-04-23 阅读 68
算法c++
  • 题目链接:105. 从前序与中序遍历序列构造二叉树
  • 考查知识:二叉树+遍历
  • 题意描述:给定二叉树的前序与中序遍历序列,构造出二叉树
  • 具体代码:
    • 方法一:递归
      • 前/后/层序遍历序列找到根结点,然后按此根结点在中序遍历序列中划分左右子树,递归执行即可
      class Solution {
      	unordered_map<int,int>idx;//树结点编号,中序遍历所在下标 
      public:
      	TreeNode* build(vector<int>&pre,vector<int>&in,int preL,int preR,int inL,int inR){//前序序列,中序序列,前序区间,中序区间
      		if(preL>preR)return NULL;//递归边界 
      		TreeNode *root=new TreeNode(pre[preL]);//建立根结点 
      		int k=idx[pre[preL]],num=k-inL;//k根节点在中序遍历序列中的下标,num左子树结点个数 
      		root->left=build(pre,in,preL+1,preL+num,inL,k-1);//递归左右子树
      		root->right=build(pre,in,preL+num+1,preR,k+1,inR);
      		return root;
      	}
          TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
      		int n=inorder.size();
      		for(int i=0;i<n;i++)idx[inorder[i]]=i;//建立树结点与中序遍历序列下标映射 
      		return build(preorder,inorder,0,n-1,0,n-1); 
          }
      };
      
举报

相关推荐

0 条评论