当前位置:  编程技术>c/c++/嵌入式

C++实现二叉树非递归遍历方法实例总结

    来源: 互联网  发布时间:2014-10-28

    本文导语:  一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个非递归遍历的方法如下,供大家参考。 具体代码如下: class Solution { ...

一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个非递归遍历的方法如下,供大家参考。

具体代码如下:

class Solution {
public:
  vector preorderTraversal(TreeNode *root) {
    vector out;
    stack s;
    s.push(root);
    while(!s.empty() && root){
      TreeNode *node = s.top();
      out.push_back(node->val);
      s.pop();
      if(node->right) s.push(node->right);
      if(node->left) s.push(node->left);
    }
    return out;
  }
  vector inorderTraversal(TreeNode *root) {
    stack s;
    vector out;
    TreeNode *node = root;
    bool done = false;
    while(!done){
      if(node){
        s.push(node);
        node = node->left;
      }else {
        if(s.empty()) done = true;
        else{
          node = s.top();
          s.pop();
          out.push_back(node->val);
          node = node->right;
        }
      }
    }
    return out;
  }
  vector postorderTraversal(TreeNode *root) {
    vector out;
    stack s;
    TreeNode* node = root;
    s.push(node);
    while(!s.empty()&&node){
      node = s.top();
      out.push_back(node->val);
      s.pop();
      if(node->left) s.push(node->left);
      if(node->right)s.push(node->right);
    }
    reverse(out.begin(),out.end());
    return out;
  }
};

希望本文所述对大家的C++算法学习有所帮助。


    
 
 

您可能感兴趣的文章:

  • 先序遍历二叉树的递归实现与非递归实现深入解析
  • C# 实现阶乘 (递归,非递归) 实现代码
  • 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法
  • 归并排序的递归实现与非递归实现代码
  • php+mysql不用递归实现的无限级分类实例(非递归)
  • 如何实现递归
  • 使用python实现递归版汉诺塔示例(汉诺塔递归算法)
  • C#采用递归实现阶乘的方法
  • C 二分查找 递归与非递归的实现代码
  • 使用递归实现数组求和示例分享
  • 什么是递归算法,它又如何实现?(有例子最好!)
  • find命令怎么用能够实现不递归查找子目录?
  • sql函数实现递归查询示例
  • C# 递归查找树状目录实现方法
  • DevExpress实现TreeList向上递归获取符合条件的父节点
  • python 实现文件的递归拷贝实现代码
  • [求助]solaris下grep如何实现递归地查找某目录下的文件。
  • php递归实现无限分类生成下拉列表函数代码
  • php递归方法实现无限分类示例
  • sql递归查询(with cte实现)
  • Base64编码原理详解及c++编码解码实现
  • 我实现了个J2EE技术的服务器,支持TCP、UDP和数据库,由于性能的原因,需要改为C或C++实现,我是C、C++新手,我该如何入手呢?看什么样的
  • c++实现MD5算法代码示例
  • java 与 C++ 实现后绑定的方法
  • c++通用模板类(template class)定义实现详细介绍
  • Qt实现的C++框架 qtioccontainer
  • 用C或C++实现主存的分配与回收
  • 在linux系统上,如何用C++实现获取和设置系统时间?
  • 文本压缩算法C++实现 Golden Huffman
  • C++标准库实现 libc++
  • C++的XMLRPC实现 XMLRPC++
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问怎么用Java实现一个URL的遍历??急!!!!
  • PHP采用自定义函数实现遍历目录下所有文件的方法
  • C#使用yield关键字让自定义集合实现foreach遍历的方法
  • 在java的GUI的应用程序中能否实现对容器(如Frame)中的所有组件遍历?
  • JAVA遍历map的几种实现方法代码
  • python实现dict版图遍历示例
  • Jquery遍历节点的实现代码
  • 关于shell遍历查询怎么实现?
  • python二叉树遍历的实现方法
  • C++实现二叉树遍历序列的求解方法
  • C#遍历文件夹的实现代码
  • 如何在linux下用c/c++边编程实现文件夹下所有子目录文件的遍历?
  • 基于Java实现的图的广度优先遍历算法
  • 三种实现方法实现数据表中遍历寻找子节点
  • C语言实现二叉树遍历的迭代算法
  • C++实现哈夫曼树简单创建与遍历的方法
  • 在linux下如何实现文件夹的遍历?
  • C语言实现图的遍历之深度优先搜索实例
  • 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
  • 二叉树遍历 非递归 C++实现代码
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现
  • flash AS3反射实现(describeType和getDefinitionByName)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3