先序遍历二叉树的递归实现与非递归实现深入解析

 更新时间:2013年07月31日 10:04:42   作者:  
以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下

1、先序遍历二叉树  递归实现
思想:若二叉树为空,返回。否则
1)遍历根节点;
2)先序遍历左子树;
3)先序遍历右子树;

代码:

复制代码 代码如下:

template<typename elemType>
void PreOrder(nodeType<elemType> *root) 

    if(root==NULL) 
        return ; 
    visit(root->data); // visit the data
    PreOrder(root->lchild); //递归调用,先序遍历左子树 
    PreOrder(root->rchild); //递归调用,先序遍历右子树 


2、先序遍历二叉树 非递归实现
思想:二叉树的非递归先序遍历,先序遍历思想:先让根进栈,只要栈不为空,就可以做弹出操作, 每次弹出一个结点,记得把它的左右结点都进栈,记得右子树先进栈,这样可以保证右子树在栈中总处于左子树的下面。

前序遍历二叉树的非递归算法思想
建立栈 Stack;
t 指向根;
当 t 不空 或 Stack 不空时反复做:
      若 t 不空,访问t,t 入 栈;t 指向左子女;
      否则:出栈顶元素到 t 中;
      t 指向右子女;
结束

复制代码 代码如下:

void PreOrder_Nonrecursive(BinaryTree T)     //先序遍历的非递归   

    if(!T) return ;   
    stack<BinaryTree> s; 
    s.push(T); 
    while(!s.empty()) 
    { 
        BinaryTree temp = s.top(); 
        visit(temp->data); 
        s.pop(); 
        if(temp->rchild) 
            s.push(temp->rchild); 
        if(temp->lchild) 
            s.push(temp->lchild); 
    } 


相关文章

  • C++详解非类型模板参数Nontype与Template及Parameters的使用

    C++详解非类型模板参数Nontype与Template及Parameters的使用

    除了类型可以作为模板参数,普通值也可以作为模板函数,即非类型模板参数(Nontype Template Parameters)。下面让我们一起了解一下
    2022-06-06
  • C++零基础精通数据结构之带头双向循环链表

    C++零基础精通数据结构之带头双向循环链表

    带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单
    2022-03-03
  • 深入单链表的快速排序详解

    深入单链表的快速排序详解

    本篇文章是对单链表的快速排序进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言实现万年历效果

    C语言实现万年历效果

    这篇文章主要为大家详细介绍了C语言实现万年历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 详解C++11中模板的优化问题

    详解C++11中模板的优化问题

    这篇文章主要介绍了C++11中模板的优化问题,通过实例代码得出结论,当所有模板参数都有默认参数时,函数模板的调用如同一个普通函数,具体示例代码跟随小编一起看看吧
    2021-09-09
  • C++编写生成不重复的随机数代码

    C++编写生成不重复的随机数代码

    本文给大家汇总介绍了3种c++实现生成不重复的随机数的函数,十分的简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • 使用C语言调用luajit的方法详解

    使用C语言调用luajit的方法详解

    C语言是一种非常流行的编程语言,而Lua是一种基于C语言开发的脚本语言,在Lua的各种实现中,luajit也是其中一种非常流行的实现,在本文中,我将为大家介绍如何使用C语言调用luajit,并且详细介绍如何传入参数,传入结构体参数,以及获取返回值
    2023-11-11
  • C语言实现扫雷游戏简易版

    C语言实现扫雷游戏简易版

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++实现商店仓库管理系统

    C++实现商店仓库管理系统

    这篇文章主要为大家详细介绍了C++实现商店仓库管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 总结UNIX/LINUX下C++程序计时的方法

    总结UNIX/LINUX下C++程序计时的方法

    本文总结了下UNIX/LINUX下C++程序计时的一些函数和方法,对日常使用C++程序的朋友很有帮助,有需要的小伙伴们可以参考学习,下面一起来看看吧。
    2016-08-08

最新评论