首页 > 代码库 > LeetCode94 Binary Tree Inorder Traversal
LeetCode94 Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes‘ values. (Medium)
For example:
Given binary tree [1,null,2,3]
,
1 2 / 3
return [1,3,2]
.
Note: Recursive solution is trivial, could you do it iteratively?
分析:
太经典基础的算法问题了,但想写出一个无bug的非递归二叉树中序遍历也不是很容易。先看递归版本的代码:
1 class Solution { 2 private: 3 vector<int> result; 4 void helper(TreeNode* root) { 5 if (root == nullptr) { 6 return; 7 } 8 helper(root -> left); 9 result.push_back(root -> val); 10 helper(root -> right); 11 } 12 public: 13 vector<int> inorderTraversal(TreeNode* root) { 14 helper(root); 15 return result; 16 } 17 };
再考虑非递归,其实就是对于每个节点,走到最左端,沿路径压栈。
到达最左端后以此返回,开始弹栈,对于每个弹出的元素,记录其value,并且走向其右节点重复上述过程(走到最左端...)。
直到栈内元素为空为止。
代码:
1 class Solution { 2 public: 3 vector<int> inorderTraversal(TreeNode* root) { 4 vector<int> result; 5 stack<TreeNode*> s; 6 TreeNode* p = root; 7 while (p || !s.empty()) { 8 while (p != nullptr) { 9 s.push(p); 10 p = p -> left; 11 } 12 if (!s.empty()) { 13 p = s.top(); 14 result.push_back(p -> val); 15 s.pop(); 16 p = p -> right; 17 } 18 } 19 return result; 20 } 21 };
LeetCode94 Binary Tree Inorder Traversal
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。