LeetCode:Binary Tree Postorder
2014-08-29 14:45
211 查看
Given a binary tree, return the postorder traversal of its nodes' values.
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
方法一:用一个map标记当前节点是否被遍历,从而确定是否应该被输出
方法二:用一个指针跟踪上次访问的节点,如果当前节点的左子女或右子女是上次访问节点的话,当前节点输出,更新上次访问节点指针
已AC 8ms
1 \ 2 / 3
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
方法一:用一个map标记当前节点是否被遍历,从而确定是否应该被输出
vector<int> postorderTraversal(TreeNode *root) { <span style="white-space:pre"> </span> vector<int> result; <span style="white-space:pre"> </span> if(root == NULL) <span style="white-space:pre"> </span> return result; <span style="white-space:pre"> </span> stack<TreeNode*> stn; <span style="white-space:pre"> </span> stn.push(root); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> TreeNode* p = NULL; <span style="white-space:pre"> </span> map<TreeNode*,bool> jugeMap; <span style="white-space:pre"> </span> jugeMap.insert(make_pair(root,false)); <span style="white-space:pre"> </span> while(!stn.empty()) <span style="white-space:pre"> </span> { <span style="white-space:pre"> </span> p = stn.top(); <span style="white-space:pre"> </span> if(p->left!=NULL && jugeMap.find(p->left) == jugeMap.end()) <span style="white-space:pre"> </span> { <span style="white-space:pre"> </span> stn.push(p->left); <span style="white-space:pre"> </span> jugeMap.insert(make_pair(p->left,false)); <span style="white-space:pre"> </span> continue; <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> if(p->right!=NULL && jugeMap.find(p->right) == jugeMap.end()) <span style="white-space:pre"> </span> { <span style="white-space:pre"> </span> stn.push(p->right); <span style="white-space:pre"> </span> jugeMap.insert(make_pair(p->right,false)); <span style="white-space:pre"> </span> continue; <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> result.push_back(p->val); <span style="white-space:pre"> </span> stn.pop(); <span style="white-space:pre"> </span> } <span style="white-space:pre"> </span> return result; }已AC 8ms
方法二:用一个指针跟踪上次访问的节点,如果当前节点的左子女或右子女是上次访问节点的话,当前节点输出,更新上次访问节点指针
vector<int> postorderTraversal(TreeNode *root) { vector<int> result; if(root == NULL) return result; stack<TreeNode*> stn; stn.push(root); TreeNode* current = root; TreeNode* pre = NULL; while(!stn.empty()) { current = stn.top(); if((current ->left == NULL && current -> right == NULL) || ((pre != NULL) && (current -> left == pre || current -> right == pre))) { result.push_back(current->val); stn.pop(); pre = current; continue; } if(current->right!=NULL) stn.push(current->right); if(current->left!=NULL) stn.push(current->left); } return result; }
已AC 8ms
相关文章推荐
- LeetCode: Binary Tree Postorder Traversal
- Leetcode bfs&dfs Binary Tree Postorder Traversal II
- leetcode——145——Binary Tree Postorder Traversal
- leetcode(145):Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- [LeetCode] Binary Tree Postorder Traversal
- leetcode Binary Tree Postorder
- LeetCode - Construct Binary Tree from Inorder and Postorder Traversal
- (leetcode)Construct Binary Tree from Inorder and Postorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] Binary Tree Postorder Traversal [42]
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode145——Binary Tree Postorder Traversal
- Construct Binary Tree from Inorder and Postorder Traversal ---LeetCode
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode: 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
- LeetCode145:Binary Tree Postorder Traversal