Construct Binary Tree from Preorder and Inorder Traversal问题及解法

来源:互联网 发布:淘宝关键词重复有用吗 编辑:程序博客网 时间:2024/06/07 00:36

问题描述:

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

问题分析:

已知树的先序和中序遍历的结果,我们可以依此来分别构建左子树、右子树和树根,递归求解即可。


过程详见代码:

/** * 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 i = 0;return build(preorder, inorder, i, 0, preorder.size() - 1);}TreeNode* build(vector<int>& preorder, vector<int>& inorder,int& i,int start,int end) {TreeNode* left = NULL;TreeNode* right = NULL;for (int j = start; j <= end; j++){if (inorder[j] == preorder[i]){left = build(preorder, inorder, ++i, start, j - 1);right = build(preorder, inorder, i, j + 1, end);TreeNode* tree = new TreeNode(inorder[j]);tree->left = left;tree->right = right;return tree;}}return NULL;}};


阅读全文
0 0