LeetCode Binary Tree Inorder Traversal 中序遍历二叉树
2013-11-05 18:20
295 查看
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree
return
Note: Recursive solution is trivial, could you do it iteratively?
confused what
read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
The above binary tree is serialized as
会如何保存这个Vector中间数据,就能解决这道题目了。
2014-1-9 update iterative的解法,我使用一个标志flag,判断是否遍历过的节点:
或者如下,leetcode上解说的算法:
理解了树的操作就好办了,破坏原树的结果输出的程序:
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.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5
The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}".
会如何保存这个Vector中间数据,就能解决这道题目了。
/** * 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) { vector<int> vi; inHelper(root, vi); return vi; } void inHelper(TreeNode *node, vector<int>& vi) { if(node == nullptr) return; inHelper(node->left, vi); vi.push_back(node->val); inHelper(node->right, vi); } };
2014-1-9 update iterative的解法,我使用一个标志flag,判断是否遍历过的节点:
vector<int> inorderTraversal(TreeNode *root) { vector<int> rs; if (!root) return rs; stack<TreeNode *> stk; stk.push(root); bool flag = false; while (!stk.empty()) { if (!flag) while (stk.top()->left) stk.push(stk.top()->left); TreeNode *t = stk.top(); rs.push_back(t->val); stk.pop(); flag = true; if (t->right) { stk.push(t->right); flag = false; } } return rs; }
或者如下,leetcode上解说的算法:
vector<int> inorderTraversal(TreeNode *root) { vector<int> rs; if (!root) return rs; stack<TreeNode *> stk; TreeNode *p = root; while (!stk.empty() || p) { if (p) { stk.push(p); p = p->left; } else { p = stk.top(); stk.pop(); rs.push_back(p->val); p = p->right; } } return rs; }
理解了树的操作就好办了,破坏原树的结果输出的程序:
vector<int> inorderTraversal(TreeNode *root) { vector<int> rs; if (!root) return rs; stack<TreeNode *> stk; stk.push(root); while (!stk.empty()) { while (stk.top()->left) stk.push(stk.top()->left); TreeNode *t = stk.top(); rs.push_back(t->val); stk.pop(); if (!stk.empty()) stk.top()->left = nullptr; if (t->right) stk.push(t->right); } return rs; }
//2014-2-14 update vector<int> inorderTraversal(TreeNode *root) { vector<int> rs; if (!root) return rs; stack<TreeNode *> stk; stk.push(root); while (!stk.empty()) { while (stk.top()->left) stk.push(stk.top()->left); TreeNode *t = stk.top(); stk.pop(); if (!stk.empty()) stk.top()->left = nullptr; rs.push_back(t->val); if (t->right) stk.push(t->right); } return rs; }
相关文章推荐
- Leetcode - Tree - 106. Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历重构二叉树)
- LeetCode(Construct Binary Tree from Preorder and Inorder Traversal )根据二叉树的中序遍历和后序遍历重建二叉树
- LeetCode-94-Binary Tree Inorder Traversal 中序遍历二叉树
- LeetCode—***Binary Tree Inorder Traversal二叉树的中序遍历
- LeetCode 94 Binary Tree Inorder Traversal (中序遍历二叉树)
- LeetCode 94 Binary Tree Inorder Traversal(二叉树的中序遍历)+(二叉树、迭代)
- LeetCode:BInary Tree Inorder Traversal(二叉树的中序遍历)
- leetcode 题解:Binary Tree Inorder Traversal (二叉树的中序遍历)
- LeetCode | Binary Tree Inorder Traversal(二叉树的中序遍历)
- [LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal(根据前序、中序遍历确定一棵二叉树 C语言)
- [线索二叉树] [LeetCode] 不需要栈或者别的辅助空间,完成二叉树的中序遍历。题:Recover Binary Search Tree,Binary Tree Inorder Traversal
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal (利用中序遍历和后续遍历确定一颗二叉树)
- LeetCode OJ:Binary Tree Inorder Traversal(中序遍历二叉树)
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
- Leetcode Construct Binary Tree from Preorder and Inorder Traversal 前序中序遍历重组二叉树
- Leetcode 94 Binary Tree Inorder Traversal 二叉树
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
- LeetCode OJ:Construct Binary Tree from Preorder and Inorder Traversal(从前序以及中序遍历结果中构造二叉树)
- 【遍历二叉树】02二叉树的中序遍历【Binary Tree Inorder Traversal】