【leetcode】BinaryTreeInorderTraversal
Question :
Given a binary tree, return the
inorder
traversal of its nodes' values.
For example:
Given binary tree
{1,#,2,3}
,
1 \ 2 / 3
return
[1,3,2]
.
Note:
Recursive solution is trivial, could you do it iteratively?
confused what
"{1,#,2,3}"
means?
> read more on how binary tree is serialized on OJ.
Anwser 1 :
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> result(0); if (root == NULL) return result; stack<TreeNode *> S; TreeNode* p = root; do { if (p != NULL) { S.push(p); p = p->left; } else { p = S.top(); S.pop(); result.push_back(p->val); p = p->right; } }while(!S.empty() || p != NULL); return result; } };
Anwser 2 :
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void dfs(TreeNode *p, vector<int> &result) { if(p->left != NULL) dfs(p->left, result); result.push_back(p->val); if(p->right!=NULL) dfs(p->right, result); } vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function TreeNode * head = root; vector<int> result; result.clear(); if(head!=NULL) { dfs(head, result); } return result; } };
Anwser 3 :
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> result; result.clear(); stack<TreeNode *> stack_in; stack<TreeNode *> stack_out; if(root == NULL) return result; stack_in.push(root); while(!stack_in.empty()) { TreeNode *node_in = stack_in.top(); stack_in.pop(); stack_out.push(node_in); if(node_in->right!=NULL && node_in->left!=NULL) { stack_in.push(node_in->right); stack_in.push(node_in->left); } else if(node_in->left!=NULL && node_in->right==NULL) { stack_in.push(node_in->left); } else if(node_in->left==NULL && node_in->right!=NULL) { stack_in.push(node_in->right); result.push_back(node_in->val); stack_out.pop(); } else { result.push_back(node_in->val); stack_out.pop(); while(!stack_out.empty()) { TreeNode * tmp = stack_out.top(); stack_out.pop(); result.push_back(tmp->val); if(tmp->right!=NULL) break; } } } return result; } };
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2013-05-03 22:36:15
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!