Construct Binary Tree from Preorder and Inorder Traversal 根据先序和中序序列生成二叉树(重重)

来源:互联网 发布:四级行政区划数据 编辑:程序博客网 时间:2024/06/05 07:28

题目:

点击打开链接

解答:

递归求解,先序递归,递归时,先序遍历的序列一定是按先后顺序访问。

首先建立根节点,然后将中序序列分成两组,分别建立左右子树。

代码:

class Solution {public:TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {int pos = 0;TreeNode *root = search(preorder, pos, inorder, 0, inorder.size() - 1);return root;}private:TreeNode *search(vector<int> &preorder, int &pos, vector<int> &inorder, int begin, int end){if (begin > end)return NULL;TreeNode *root = new TreeNode(preorder[pos]);int mid = find(preorder[pos], inorder, begin, end);//先序表后移一位++pos;//递归建立左右子树root->left = search(preorder, pos, inorder, begin, mid - 1);root->right = search(preorder, pos, inorder, mid + 1, end);return root;}//寻找根节点在中序表中的位置,以此将中序表分成两组int find(int target, vector<int> &inorder, int begin, int end){for (int i = begin; i <= end; i++){if (target == inorder[i])return i;}}};


0 0
原创粉丝点击