难度: 简单
题目:
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
解题:
迭代
中序遍历要对父节点进行记录,遍历完左子节点后再打印父节点,因此借助栈来解题。
将当前节点是否为空以及栈是否为空作为循环条件(或关系);若当前节点不为空则将此节点压入栈,使当前节点指针指向左子节点,继续遍历;否则将当前指针指向栈顶并弹出,即此节点的父节点,打印,遍历其右节点。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
vector<int> result;
while(root != NULL || !s.empty())
{
if(root)
{
s.push(root);
root = root->left;
}else
{
root = s.top();
s.pop();
result.push_back(root->val);
root = root->right;
}
}
return result;
}
};
递归
递归思路很简单,当前节点空时返回,否则先遍历其左节点,然后遍历本身,再遍历右节点。
如下代码从Leetcode复制。
class Solution {
public:
void inorder(TreeNode* root, vector<int>& res) {
if (!root) {
return;
}
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
inorder(root, res);
return res;
}
};