Binary Tree Postorder Traversal - LeetCode 145
2015-05-22 23:01
453 查看
题目描述:
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
Tags Tree Stack
分析:
二叉树的后序遍历:左右根。
方法一:递归法.
方法二:非递归法,借助栈,新定义一个结构体,标记右子树是否已经访问
以下是C++实现代码,比较简单就不多说了。
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
Tags Tree Stack
分析:
二叉树的后序遍历:左右根。
方法一:递归法.
方法二:非递归法,借助栈,新定义一个结构体,标记右子树是否已经访问
以下是C++实现代码,比较简单就不多说了。
/*///递归////0ms////*/ /** * 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: void postOrderHelp(TreeNode* root,vector<int> &vec) { if(root == NULL) return; postOrderHelp(root->left,vec); postOrderHelp(root->right,vec); vec.push_back(root->val); } vector<int> postorderTraversal(TreeNode* root) { vector<int> vec; postOrderHelp(root,vec); return vec; } }; /*//非递归///0ms///*/ /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ struct TreeNodeMod{ TreeNode *node; bool rightVisited; }; class Solution { public: TreeNodeMod* goFarLeft(TreeNode* root,stack<TreeNodeMod* > &s) { if(root == NULL) return NULL; TreeNode *cur = root; TreeNodeMod *newptr; while(cur ->left != NULL) { newptr = new TreeNodeMod(); newptr->node = cur; newptr->rightVisited = false; s.push(newptr); cur = cur->left; } newptr = new TreeNodeMod(); newptr->node = cur; newptr->rightVisited = false; return newptr; } vector<int> postorderTraversal(TreeNode* root) { stack<TreeNodeMod* > s; TreeNodeMod *cur = goFarLeft(root,s); vector<int> vec; while(cur != NULL) { if(cur->node->right == NULL || cur->rightVisited) { vec.push_back(cur->node->val); delete cur; if(!s.empty()) { cur = s.top(); s.pop(); } else cur = NULL; } else { cur ->rightVisited = true; s.push(cur); cur = goFarLeft(cur->node->right,s); } } return vec; } };
相关文章推荐
- [leetcode-145]Binary Tree Postorder Traversal(c++)
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
- leetcode[145] Binary Tree Postorder Traversal
- LeetCode 145 Binary Tree Postorder Traversal(二叉树的后续遍历)+(二叉树、迭代)
- LeetCode145 Binary Tree Postorder Traversal(迭代实现) Java
- LeetCode No145 Binary Tree Postorder Traversal
- [LeetCode]145 Binary Tree Postorder Traversal
- leetcode 145 Binary Tree Postorder Traversal C++
- Leetcode145——Binary Tree Postorder Traversal
- leetcode-145-Binary Tree Postorder Traversal
- LeetCode145:Binary Tree Postorder Traversal
- Leetcode145: Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 145:Binary Tree Postorder Traversal
- [LeetCode]: 145: Binary Tree Postorder Traversal
- leetcode-145-Binary Tree Postorder Traversal
- Java for LeetCode 145 Binary Tree Postorder Traversal
- leetCode 145:Binary Tree Postorder Traversal
- LeetCode 145 Binary Tree Postorder Traversal
- leetcode || 145、Binary Tree Postorder Traversal
- Leetcode #145 Binary Tree Postorder Traversal