思路:
用一个数组承接栈内元素,迭代的退出条件是节点为空,迭代的逻辑是先根节点,再右节点出栈,左节点出栈,这样能实现根左右。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
//定义栈,和数组
stack<TreeNode*> st;
vector<int> result;
//特殊情况
if(root == NULL) return result;
//输入根节点
st.push(root);
//迭代终止条件是空
while(!st.empty()){
//指针指向栈顶
TreeNode *node = st.top();
//弹出
st.pop();
//根节点
result.push_back(node->val);
//为了根左右,先是右节点入栈,再先出栈,再左节点
if(node->right) st.push(node->right);
if(node->left) st.push(node->left);
}
return result;
}
};