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

来源:互联网 发布:java排队叫号 编辑:程序博客网 时间:2024/06/06 00:39

问题描述:

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

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


问题分析:

本题与Construct Binary Tree from Preorder and Inorder Traversal问题及解法 类似,只是中间稍作了一下转换,在构造树的时候是先构造右子树,再构造左子树,最后构造根节点。


过程详见代码:

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


阅读全文
0 0
原创粉丝点击