LeetCode Binary Tree Inorder Traversal
2012-10-27 21:48
399 查看
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree
非递归版本:
用一个栈来模拟递归的情况,
首先思考inorder traverse的递归函数
traverse(left tree);
visit current node
traverse(right tree);
也就是说我们把一个节点压入栈中,首先它会先递归访问左子树(左节点入栈),再访问本身(这个时候这个节点就可以出栈了),在访问右子树(右节点入栈)。
最后我们定义一个数据结构
其中findLeft是判断是否已将左节点入栈了
递归版本:
For example:
Given binary tree
{1,#,2,3},
非递归版本:
用一个栈来模拟递归的情况,
首先思考inorder traverse的递归函数
traverse(left tree);
visit current node
traverse(right tree);
也就是说我们把一个节点压入栈中,首先它会先递归访问左子树(左节点入栈),再访问本身(这个时候这个节点就可以出栈了),在访问右子树(右节点入栈)。
最后我们定义一个数据结构
struct Node { TreeNode *tNode; bool findLeft; Node(){} Node(TreeNode *n):tNode(n), findLeft(false){} };
其中findLeft是判断是否已将左节点入栈了
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ struct Node { TreeNode *tNode; bool findLeft; Node(){} Node(TreeNode *n):tNode(n), findLeft(false){} }; class Solution { private: vector<int> ret; public: vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function stack<Node> s; s.push(Node(root, false)); ret.clear(); while(!s.empty()) { Node node = s.top(); if (node.tNode == NULL) s.pop(); else { if (!node.findLeft) { s.pop(); s.push(Node(node.tNode, true)); s.push(Node(node.tNode->left, false)); } else { s.pop(); ret.push_back(node.tNode->val); s.push(Node(node.tNode->right, false)); } } } return ret; } };
递归版本:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { private: stack<TreeNode* > s; vector<int> ret; public: vector<int> inorderTraversal(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function ret.clear(); if (root == NULL) return ret; s.push(root); TreeNode *node = root; while(!s.empty()) { node = node->left; s.push(node); } } };
相关文章推荐
- [LeetCode] 011: Binary Tree Inorder Traversal
- LeetCode 094 Binary Tree Inorder Traversal
- LeetCode Binary Tree Inorder Traversal
- leetcode---Construct Binary Tree from Preorder and Inorder Traversal---树的构建
- [leetcode]Construct Binary Tree from Inorder and Postorder Traversal @ Python
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 63: Binary Tree Inorder Traversal
- 【LeetCode】Construct Binary Tree from Inorder and Postorder Traversal
- leetcode-94-Binary Tree Inorder Traversal
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 【LeetCode】-Binary Tree Inorder Traversal
- LeetCode 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-105:Construct Binary Tree from Preorder and Inorder Traversal (利用先序和中序遍历构建二叉树) -- medium
- [Leetcode] Binary Tree Inorder Traversal (Java)
- [LeetCode] [Binary Tree Inorder Traversal 2013-11-05]
- LeetCode: Binary Tree Inorder Traversal
- Leetcode#106 Construct Binary Tree from Inorder and Postorder Traversal