【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
2016-05-03 22:11
369 查看
题目:
Given inorder and postorder traversal of a tree, construct the binary tree.
翻译:
由二叉树的中序遍历和后序遍历还原二叉树。
思路:
做这一题之前可以先看105题,由前序遍历和中序遍历还原二叉树,实现上主要是借助了一个栈。而这一题转变思路之后基本和105题一模一样。 可以从后往前查看后序遍历和中序遍历,最后一个数字一定是根节点。每生成一个节点,都将该节点入栈。如果栈顶元素与中序遍历相应位置上的元素一致,则栈顶出栈,直到某个元素的子节点未完全遍历,则创建它的左分支。
代码:
就在105题的基础上把i,j的初始值从0改为中序遍历长度的size()-1,然后i,j每次减一就可以了。
结果:
Given inorder and postorder traversal of a tree, construct the binary tree.
翻译:
由二叉树的中序遍历和后序遍历还原二叉树。
思路:
做这一题之前可以先看105题,由前序遍历和中序遍历还原二叉树,实现上主要是借助了一个栈。而这一题转变思路之后基本和105题一模一样。 可以从后往前查看后序遍历和中序遍历,最后一个数字一定是根节点。每生成一个节点,都将该节点入栈。如果栈顶元素与中序遍历相应位置上的元素一致,则栈顶出栈,直到某个元素的子节点未完全遍历,则创建它的左分支。
代码:
就在105题的基础上把i,j的初始值从0改为中序遍历长度的size()-1,然后i,j每次减一就可以了。
<span style="font-size:18px;">class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(inorder.size()==0) return NULL; TreeNode* root; stack<TreeNode*> st; TreeNode* tr; int i,j,k; k=0; i=j=inorder.size()-1; root=new TreeNode(postorder[i]); st.push(root); tr=root; i--; while(i>=0) { if (!st.empty() && st.top()->val==inorder[j]) { tr=st.top(); st.pop(); k=1; j--; } else { if (k==0) { tr->right=new TreeNode(postorder[i]); i--; tr=tr->right; st.push(tr); } else { tr->left=new TreeNode(postorder[i]); i--; tr=tr->left; st.push(tr); k=0; } } } return root; } };</span>
结果:
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解