106. Construct Binary Tree from Inorder and Postorder Traversal
2016-09-04 07:14
337 查看
Given inorder and postorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
这题跟105. construct binary tree from preorder and inorder traversal几乎是一回事。所以就不再分析,自己手动从输出到树回复一边,找到两种输出之间的位置关系就行。这里就直接给出递归和迭代两种方法,代码跟105题如出一辙。
Note: You may assume that duplicates do not exist in the tree.
这题跟105. construct binary tree from preorder and inorder traversal几乎是一回事。所以就不再分析,自己手动从输出到树回复一边,找到两种输出之间的位置关系就行。这里就直接给出递归和迭代两种方法,代码跟105题如出一辙。
方法一:递归
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return helper(postorder, inorder, 0, inorder.size()-1, 0, postorder.size()-1); } TreeNode* helper(vector<int>& postorder, vector<int>& inorder, int instart, int inend, int postart, int poend) { if (instart > inend) return NULL; int rootval = postorder[poend]; int i; for (i = instart; i <= inend; i++) { if (inorder[i] == rootval) break; } TreeNode* res = new TreeNode(rootval); res->left = helper(postorder, inorder, instart, i-1, postart, postart+(i-instart)-1); res->right = helper(postorder, inorder, i+1, inend, postart+(i-instart), poend-1); return res; }
方法二:queue里的迭代
private: struct NewNode { TreeNode* node; int rootindex; int leftindex; int rightindex; NewNode(TreeNode* treenode): node(treenode), rootindex(0), leftindex(0), rightindex(0) {} }; public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if (postorder.size() == 0 || inorder.size() == 0) return NULL; queue<NewNode*> queueNode; TreeNode *root = new TreeNode(postorder[postorder.size()-1]); NewNode *Root = new NewNode(root); Root->rootindex = postorder.size() - 1; Root->rightindex = inorder.size() - 1; queueNode.push(Root); int rootval; while (!queueNode.empty()) { NewNode* curNode = queueNode.front(); queueNode.pop(); if (curNode->leftindex >= curNode->rightindex) continue; rootval = postorder[curNode->rootindex]; for (int i = curNode->leftindex; i <= curNode->rightindex; i++) { if (inorder[i] == rootval) { if (i < curNode->rightindex) { TreeNode* rightnode = new TreeNode(postorder[curNode->rootindex-1]); NewNode* rightNode = new NewNode(rightnode); rightNode->rootindex = curNode->rootindex - 1; rightNode->leftindex = i + 1; rightNode->rightindex = curNode->rightindex; curNode->node->right = rightnode; queueNode.push(rightNode); } if (i > curNode->leftindex) { TreeNode* leftnode = new TreeNode(postorder[curNode->rootindex-(curNode->rightindex-i)-1]); NewNode* leftNode = new NewNode(leftnode); leftNode->rootindex = curNode->rootindex-(curNode->rightindex-i)-1; leftNode->leftindex = curNode->leftindex; leftNode->rightindex = i - 1; curNode->node->left = leftnode; queueNode.push(leftNode); } } } } return root; }
相关文章推荐
- leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode --- 106. Construct Binary Tree from Inorder and Postorder Traversal
- leetcode || 106、Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: 106_Construct Binary Tree from Inorder and Postorder Traversal | 根据中序和后序遍历构建二叉树 | Medium
- [LeetCode]106 Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode] 106.Construct Binary Tree from Inorder and Postorder Traversal
- [JAVA]LeetCode106 Construct Binary Tree from Inorder and Postorder Traversal
- Construct Binary Tree from Inorder and Postorder Traversal - LeetCode 106
- LeetCode 105/106 Construct Binary Tree from Preorder/Postorder and Inorder Traversal
- Leetcode#106 Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode#106]Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode: Construct Binary Tree from Inorder and Postorder Traversal [106]
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- leetcode[106]Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode 79] 106 Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106: Construct Binary Tree from Inorder and Postorder Traversal
- Java for LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal