二叉树的遍历是学习二叉树最基本却极为重要的一环。当你熟练掌握二叉树的遍历之后,你会发现很多题目都是建立在遍历的基础上来解决的。本文章就是为了盘点一下各种遍历算法的原理和实现。
前序遍历
前序遍历也叫先序遍历(preorder),整个操作过程比较简单,先访问根结点,在访问左子树,左子树访问完之后访问右子树。
- 若二叉树为空,则什么也不做
- 否则:
2.1 访问根结点
2.2. 先序遍历左子树
2.3. 先序遍历右子树
递归实现
void preOrder(BinTree* BT){
if(BT){
printf("%d ", BT->data);
preOrder(BT->left);
preOrder(BT->right);
}
}
非递归实现
void preOrder(TreeNode* root){
if(root == NULL) return;
stack<TreeNode*> S; // 初始化栈
TreeNode* node = root; // 声明遍历指针
while(node || !S.empty()){
if(node != NULL)}{
// 不断访问树的根节点,并且存储左子树(若存在的话)
cout << node->val << " ";
S.push(node);
node = node->left;
}
else{
// 遇到空指针,访问栈顶指针指向的右子树结点
node = S.top()->right;
S

本文详细介绍了二叉树的前序、中序、后序遍历的递归和非递归实现,包括先访问根节点、左子树和右子树的逻辑。此外,还探讨了层序遍历和深度优先遍历这两种不同的遍历策略,是学习二叉树遍历的重要资源。
最低0.47元/天 解锁文章
4577

被折叠的 条评论
为什么被折叠?



