二叉树遍历
二叉树遍历最简单的就是递归了。因为递归实质上是栈存了一些中间值,所以我们可以使用stack实现迭代版的遍历。 中序遍历 步骤: 首先将root节点作为当前节点。 1.如果当前节点不为空,压入当前节点。将左节点作为当前节点。 2.否则弹出栈顶节点作为当前节点,输出当前节点。 3.如果右节点不为空,右节点作为当前节点。 4.否则将当前节点置为空。 重复1、2、3、4直到栈为空。 void InorderTraversal(TreeNode *root){ if(!root)return; TreeNode *node=root; stack<TreeNode*> mystk; while(node||mystk.size()){ while(node){ mystk.push(node); node=node->left; } node=mystk.top(); mystk.pop(); cout<<node->val<<'\t'; if(node->right){ node=node->right; }else{ node=NULL; } } } 前序遍历 前序遍历和中序遍历差不多,只是输出节点值的时机不同。 步骤: 以root节点作为当前节点 1.如果当前节点不为空,将当前节点压入栈,同时输出当前节点。并将左节点作为当前节点。 2.否则弹出栈顶作为当前节点。 3.如果右节点不为空