题目:
用迭代法写出二叉树的前序遍历
方法:
用迭代法写出二叉树的前序遍历,首先我们呢需要定义一个保存结果的数组,一个用来遍历的树节点的栈指针。首先判断树的根节点是否为空,如果根节点为空那么直接返回空即可;如果根节点不为空的话再继续遍历。首先将根节点入栈,随后出栈进入结果数组中,判断其的左右孩子节点是否存在,如果存在先将右孩子节点入栈,再将左孩子节点入栈,因为这样出栈后才是中左右的前序遍历的顺序。随后再将栈顶元素出栈,重复上面的步骤直到结束,就获得了一个保存其结果的结果数组。
题解:
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 != NULL) st.push(node->right); //右孩子先入栈后出栈
if(node->left != NULL) st.push(node->left); //左孩子后入栈先出栈
}
return result;
}
};