给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode)
解法一:迭代
/** * 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: vector<int> inorderTraversal(TreeNode* root) { vector<int> ret; stack<TreeNode*> S; if (root == nullptr) return ret; while(true) { if (root) //寻找最左节点 { S.push(root); root = root->left; //深入遍历左子树 } else if (!S.empty()) { root = S.top(); S.pop(); ret.push_back(root->val); root = root->right; //转向右子树 } else break; } return ret; } };
解法二:递归
/** * 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: vector<int> ret; vector<int> inorderTraversal(TreeNode* root) { if (root == nullptr) return ret; inorderTraversal(root->left); ret.push_back(root->val); inorderTraversal(root->right); return ret; } };