题目描述
Given a binary tree, return the inorder traversal of its nodes’ values.
题目大意
对二叉树进行中序遍历。
思路分析
这里我使用非递归的写法,关键在于处理好入栈时机和出栈时机。当栈顶元素没有左子树时出栈,p转向其右子树继续遍历。
关键代码
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stackTN;
TreeNode *p = root;
vector<int> result;
while (p != NULL || !stackTN.empty()) {
while (p != NULL) {
stackTN.push(p);
p = p->left;
}
p = stackTN.top();
stackTN.pop();
result.push_back(p->val);
p = p->right;
}
return result;
}
总结
利用栈实现非递归写法,可以节省空间,并对算法效率有一定的提升。需要注意好遍历指针的指向,以及出栈的条件等问题。