三种遍历:先序、中序、后序
先序循环遍历:
// 先序遍历
void preOrderIterator(TreeNode *root){
if (root)
{
stack<TreeNode*> s;
while(root || !s.empty()){ // 只要root不为空
// 一路压栈
while(root){ // r非空
cout << root->_data << " ";
s.push(root);
root = root->_left; // 将r取为r的左节点
}
// 出栈 - 类似于dfs,在s栈空前一直寻找有右节点的,把右节点压栈输出然后继续寻找这个右节点的左节点
root = s.top();
s.pop();
root = root->_right;
}
}
}
中序循环遍历:
// 中序遍历
void midOrderIterator(TreeNode *root){
if (root)
{
stack<TreeNode*> s;
while(root || !s.empty()){ // 只要root不为空
// 一路压栈
while(root){ // r非空
s.push(root);
root = root->_left; // 将r取为r的左节点
}
// 出栈 - 类似于dfs,在s栈空前一直寻找有右节点的,把右节点压栈输出然后继续寻找这个右节点的左节点
root = s.top();
s.pop();
cout << root->_data << " "