当前位置: 代码迷 >> 综合 >> 编程题:根据前序遍历和中序遍历,重建二叉树
  详细解决方案

编程题:根据前序遍历和中序遍历,重建二叉树

热度:16   发布时间:2023-10-22 03:18:59.0

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* _buildTree(vector<int>& preorder, vector<int>& inorder,int& prei,int inbegin,int inend){if(inbegin>inend)return NULL;TreeNode* root=new TreeNode(preorder[prei]);int rooti=inbegin;while(rooti<=inend){if(preorder[prei]==inorder[rooti])break;else++rooti;}if(inbegin<=rooti-1)root->left= _buildTree(preorder,inorder,++prei,inbegin,rooti-1);elseroot->left=NULL;if(rooti+1<=inend)root->right=_buildTree(preorder,inorder,++prei,rooti+1,inend);elseroot->right=NULL;return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int inbegin=0;int prei= 0;int inend=inorder.size()-1;return _buildTree(preorder,inorder,prei,inbegin,inend);}
};
  相关解决方案