给定一个二叉树的根节点 root ,返回它的 中序 遍历。
解法一:递归实现,省略
解法二:非递归实现
1、申请一个新的栈stack,初始化时,令遍历tmpNode = root。
2、先把tmpNode节点压入栈中,再对以tmpNode节点为头结点的整颗子树来说,依次把左边界压入栈中,即不停地令tmpNode = tmpNode->left,然后重复步骤2。
3、不断重复步骤2,发现tmpNode为空,此时从stack中弹出一个节点,记为node,收集node的值,并让tmpNode = tmpNode->right,然后继续重复步骤2。
4、当stack为空且tmpNode为空时,整个过程停止。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> sck;
TreeNode* tmpNode = root;
while(!sck.empty() || tmpNode != nullptr)
{
if(tmpNode != nullptr)
{
sck.push(tmpNode);
tmpNode = tmpNode->left;
}
else
{
tmpNode = sck.top();
sck.pop();
result.push_back(tmpNode->val);
tmpNode = tmpNode->right;
}
}
return result;
}
};