`

遍历二叉树的递归与非递归算法

阅读更多

利用递归实现二叉树的先序,中序,后序遍历操作

/* 先序、中序、后序递归遍历二叉树算法  */

void PreOrder(BiTree T)              //先序遍历
{
    if(T != NULL) {
        visit(T);                   //访问根节点
        PreOrder(T -> lchild);      //递归遍历左子数
        PreOrder(T -> rchild);      //递归遍历右子数
    }

}

void InOrder(BiTree T)  //中序遍历
{
    if(T != NULL) {
        InOrder(T -> lchild);
        visit(T);
        InOrder(T -> rchild);
    }
}

void PostOrder(BiTree T)  //后序遍历
{
    if(T != NULL) {
        PostOrder(T -> lchild);
        PostOrder(T -> rchild);
        visit(T);
    }
}

 

利用栈实现二叉树的先序,中序,后序遍历的非递归操作

/* 先序、中序、后序非递归遍历二叉树算法  */

void PreOrder(BiTree T)
{
    InitStack(s);
    BiTree p = T;
    while(p || !IsEmpty(S)) {
        while(p) {
            visit(p);
            push(S, p);
            p = p -> lchild;
        }
        if(IsEmpty(S)) {
            p = Pop(S);
            p = p -> rchild;
        }
    }

}

void InOrder(BiTree T)
{
    InitStack(S);
    BiTree p = T;
    while(p || !IsEmpty(S)) {
        if(p) {
            Push(S, p);
            p = p -> lchild;
        } else {
            Pop(S, p);
            visit(p);
            p = p -> rchild;
        }
    }
}

void PostOrder(BiTree T)
{
    InitStack(S);
    BiTree p, r;
    p = T;
    r = NULL;
    while(p || !IsEmpty(S)) {
        if(p) {
            Push(S, p);
            p = p -> lchild;
        } else {
            GetTop(S, p);
            if(p -> rchild && p -> rchild != r) {
                p = p -> rchild;
                push(S, p);
                p = p -> lchild;
            } else {
                Pop(S, p);
                visit(p);
                r = p;
                p = NULL;
            }
        }
    }
}

 

1
0
分享到:
评论

相关推荐

    中序遍历二叉树非递归算法

    在IT领域,尤其是在数据结构与算法的学习中,中序遍历二叉树的非递归算法是一个关键且实用的知识点。通常,我们首先通过递归来实现二叉树的遍历,但递归方法可能因深度过大导致栈溢出,因此掌握非递归版本的遍历算法...

    二叉树先序遍历、中序遍历和后序遍历非递归算法 C++源码

    用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法

    C++ 二叉树的先序遍历、中序遍历和后序遍历非递归算法

    用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。

    中序遍历二叉树非递归算法 栈实现代码

    //二叉树的二叉链表存储表示 typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; typedef struct { BiTree *base; BiTree *top; int stacksize; //当前...

    二叉树先序、中序、后序遍历非递归算法

    通过这些算法,我们可以有效地遍历二叉树中的每一个节点,而且相比于递归实现,非递归方法更加高效和安全,尤其是在处理大规模数据时更为适用。希望这些知识点能够帮助大家更好地理解和应用二叉树的相关算法。

    遍历二叉树递归+非递归实验报告.doc

    本文将围绕“遍历二叉树递归+非递归实验报告”这一主题,深入探讨二叉树的构造特征、遍历方法,以及递归与非递归遍历的实现和区别。 首先,二叉树作为树形数据结构的一种,其节点最多有两个子节点,分别称为左子...

    C语言实现二叉树的前序遍历(非递归)

    在深入探讨C语言实现二叉树的前序遍历(非递归)之前,我们首先应当理解何为二叉树以及前序遍历的基本概念。 ### 二叉树简介 二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单分支结点: 递归计算双分支结点: 递归计算叶子数: 二叉数的深度: 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归...

    按层次遍历二叉树的算法

    "按层次遍历二叉树的算法" 按层次遍历二叉树的算法是指从树的根结点开始,逐层遍历树的所有结点,直到遍历完整个树。这种遍历方式可以分为两种:宽度优先遍历(Breadth-First Traversal)和深度优先遍历(Depth-...

    二叉树先序、中序、后序三种遍历的非递归算法

    二叉树三种遍历非递归算法 二叉树是一种常用的数据结构,它广泛应用于计算机科学和软件工程中。二叉树的遍历是指对二叉树中的每个结点进行访问的过程。常见的二叉树遍历方法有三种:先序遍历、中序遍历和后序遍历。...

    先序遍历二叉树的非递归算法程序

    编写先序遍历二叉树的非递归算法程序,要求: (1)以二叉链表建立二叉树。 (2)输出遍历的结点序列。 (3)有实例验算。

    数据结构二叉树遍历递归,非递归

    在本主题中,我们将深入探讨二叉树的三种主要遍历方法:中序遍历、前序遍历和后序遍历,以及如何通过递归和非递归的方式实现这些遍历。 首先,让我们理解递归遍历的概念。递归是一种解决问题的方法,它将问题分解为...

    数据结构-非递归遍历二叉树

    非递归遍历二叉树是一种不依赖递归函数来访问树的所有节点的方法,它通常通过栈或队列等数据结构来实现。下面我们将详细探讨非递归遍历二叉树的先序、中序和后序策略。 先序遍历是二叉树遍历的一种方法,其顺序为:...

    由先根次序和中跟次序建立二叉树,以及遍历的递归、非递归算法

    由先根次序和中跟次序建立二叉树,以及各种遍历的递归、非递归算法

    遍历二叉树的非递归算法

    ### 遍历二叉树的非递归算法 #### 概述 在计算机科学领域,二叉树是一种常见的数据结构,在很多应用中都扮演着重要角色。对于二叉树的遍历,通常有三种主要的方式:前序遍历、中序遍历以及后序遍历。这些遍历方式...

    二叉树的非递归遍历

    二叉树的非递归遍历,使用C++实现二叉树的非递归遍历,对正在学习算法的同学应该挺有帮助的

    遍历二叉树的4个非递归算法.rar_binary tree_二叉树_二叉树 非递归 遍历_递归_遍历 CSharp

    本资源"遍历二叉树的4个非递归算法.rar"提供了C#语言实现的这四种非递归遍历方法,对于学习者来说是非常宝贵的资料。 1. **前序遍历**(Root-Left-Right): 在前序遍历中,我们首先访问根节点,然后递归地遍历左...

    二叉树遍历前序非递归算法

    C语言二叉树遍历前序非递归算法,简单易懂,正确无误

    二叉树递归和非递归遍历实验报告(含源码)

    它们是遍历二叉树的基本方式,用于访问二叉树的所有结点。 1. 前序遍历:首先访问根结点,然后递归地访问左子树,最后访问右子树。 2. 中序遍历:在二叉排序树中,中序遍历可以得到升序序列。首先访问左子树,然后...

Global site tag (gtag.js) - Google Analytics